HDU4089/Uva1498 Activation 概率DP(好题)
题意:Tomato要在服务器上激活一个游戏,一开始服务器序列中有N个人,他排在第M位,每次服务器会对序列中第一位的玩家进行激活,有四种结果:
1.有p1的概率会激活失败,这时候序列的状态是不变的。
2.有p2的概率第一位的玩家会连接错误,这时候序列中第一位的玩家会成为最后一位,其他玩家相对位置不变。
3.有p3的概率第一位的玩家激活成功,这时候第一位的玩家会离开序列。
4.有p4的概率服务器崩溃,发生这件事之后所有玩家都不能激活了。
求Tomato遇到服务器崩溃并且在服务器崩溃时处于前K位的概率。
解法:这道题是一道非常好的概率DP题。必须一步一步来全部理解之后自己写一遍。
首先是设计状态dp[i]j[]代表队伍有i个人主角现在拍第j的概率。
写出状态转移方程(搭配题意写):
j==1 ,dp[i][j]=p1dp[i][j]+p2dp[i][i]
1<j<=k ,dp[i][j]=p1dp[i][j]+p2dp[i][j-1]+p3dp[i-1][j-1]+p4
j>k ,dp[i][j]=p1dp[i][j]+p2dp[i][j-1]+p3dp[i-1][j-1]
初步化简上诉式子:
其中 pp=1/(1-p1)
j==1 ,dp[i][j]=pp*p2dp[i][i]
1<j<=k ,dp[i][j]=pp*p2dp[i][j-1]+pp*p3dp[i-1][j-1]+pp*p4
j>k ,dp[i][j]=pp*p2dp[i][j-1]+pp*p3dp[i-1][j-1]
深度抽象上诉式子:
j==1 ,dp[i][j]=k[j] * dp[i][i] + b[j]
1<j<=k ,dp[i][j]=k[j] * dp[i][j-1] + b[j]
j>k ,dp[i][j]=k[j] * dp[i][j-1] + b[j]
(为什么是这样:我们仔细观察初步化简的式子:每一个方程右边除了dp[i][i]/dp[i][j-1]是与i同阶的,后面的都是i-1阶的,因为我们是一层一层做dp的,也就是说后面的可以看成是常数,所以这里的kj和bj具体是什么我们先根据初步化简的式子求出来放到数组里当成常数然后就不用管了)
我们仔细观察上诉深度化简的式子,发现其实第i阶就是有n个变量dp[i][j],然后有n个不同的方程,那么就一定可以用高斯消元解出方程!!!
但是再次仔细观察发现:欸!这n个方程结构很简单恰好形成了个环形!!那么我们就可以利用这点直接先解出一个未知数,然后递推出全部的未知数!
怎么解?
我们用笨方法模拟一下:假设只有3个未知数
dp1=k1dp3+c1
dp2=k2( k1dp3 + c1 ) +c2
dp3=k3( k2( k1dp3 + c1 ) +c2 ) + c3
我们尝试把dp3化简: dp3=k3k2k1dp3 + k3k2c1 + k3c2 + c3
那么规律不就出来了吗!
于是我们解出dp[i][i]再解出dp[i][1],然后就可以愉快地递推后面的值了。
#include<bits/stdc++.h>
using namespace std;
const int N=2e3+;
const double eps=1e-;
int n,m,K;
double p1,p2,p3,p4,pp,p14;
double k[N],b[N],dp[N][N]; void init() {
for (int i=;i<=n;i++) k[i]=b[i]=;
for (int i=;i<=n;i++) for (int j=;j<=n;j++) dp[i][j]=;
} int main()
{
while (cin>>n && n) {
cin>>m>>K;
cin>>p1>>p2>>p3>>p4;
init();
if (fabs(p4)<eps) {
printf("%.5lf\n",); continue;
}
pp=1.0/(1.0-p1); p14=1.0/(1.0-p1-p4); for (int i=;i<=n;i++) k[i]=pp*p2; dp[][]=p4/(-p1-p2);
for (int i=;i<=n;i++) {
b[]=pp*p4;
for (int j=;j<=K;j++) b[j]=pp*p3*dp[i-][j-]+pp*p4;
for (int j=K+;j<=i;j++) b[j]=pp*p3*dp[i-][j-]; double kk=1.0,bb=;
for (int j=i;j;j--) {
bb+=kk*b[j];
kk=k[j]*kk;
} dp[i][i]=bb/(1.0-kk);
dp[i][]=k[]*dp[i][i]+b[];
for (int j=;j<i;j++) dp[i][j]=k[j]*dp[i][j-]+b[j];
}
printf("%.5lf\n",dp[n][m]);
}
return ;
}
HDU4089/Uva1498 Activation 概率DP(好题)的更多相关文章
- 13年山东省赛 The number of steps(概率dp水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud The number of steps Time Limit: 1 Sec Me ...
- Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题
除非特别忙,我接下来会尽可能翻译我做的每道CF题的题面! Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题 题面 胡小兔和司公子都认为对方是垃圾. 为了决出谁才是垃 ...
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- [HDU4089]Activation(概率DP)
HDU4089 题意:有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有一下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排 ...
- HDU 4089 Activation 概率DP 难度:3
http://acm.hdu.edu.cn/showproblem.php?pid=4089 这道题中一共有两个循环: 1.事件1 如果一直落在Activation failed事件上,那么就会重新继 ...
- poj 3071 Football (概率DP水题)
G - Football Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- hdu4405Aeroplane chess 概率dp水题
//从0到n有n+1个格子 //对于格子i,掷一次骰子的数为x.那么能够从位置i到位置i+x //格子之间有连线,假设格子a和b有连线,那么从a到b不用掷骰子 //求从0到n的骰子掷的次数的期望 // ...
- 【BZOJ1426】收集邮票 概率DP 论文题 推公式题
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- [转]概率DP总结 by kuangbin
概率类题目一直比较弱,准备把kuangbin大师傅总结的这篇题刷一下! 我把下面的代码换成了自己的代码! 原文地址:http://www.cnblogs.com/kuangbin/archive/20 ...
随机推荐
- Sublime-Text macOS 编译运行armadillo
{ "cmd" : ["g++ -std=c++14 -Wall -larmadillo -framework Accelerate ${file_name} -o ${ ...
- hdu 5212 : Code【莫比乌斯】
题目链接 题给代码可以转化为下面的公式 然后用F[n]记录公约数为n的(a[i],a[j])对数,用f[n]记录最大公约数为n的(a[i],a[j])对数 之后枚举最大公约数d 至于求F[n],可以先 ...
- 【leetcode】1030. Matrix Cells in Distance Order
题目如下: We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), whe ...
- 第六周作业—N42-虚怀若谷
一.自建yum仓库,分别为网络源和本地源 [root@centos7 ~]# cd /etc/yum.repos.d/ [root@centos7 yum.repos.d]# mkdir bak #建 ...
- dede标签大全
想必很多人对后台不熟悉,并且觉得很难.其实不难,只是你们没有找到合适的方法学习而已!只有找到一个合适的学习方法,不管做什么事情,我想都很容易.学习讲究的是效率,而效率又是由思路决定的.就拿网页制作来说 ...
- CKeditor粘贴图片在IE下自动上传的研究
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- [luogu]P1315 观光公交[贪心]
[luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...
- Curl命令、Elinks命令、lynx命令、Wget命令、lftp命令
一.Curl命令 语法 curl(选项)(参数) 选项 -a/--append 上传文件时,附加到目标文件 -A/--user-agent <string> 设置用户代理发送给服务器 -a ...
- C# 中获取路径
string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名. string str2=Environm ...
- [CSP-S模拟测试]:嘟嘟噜(约瑟夫问题)
题目描述 由于众所周知的原因,冈部一直欠真由理一串香蕉.为了封上真由理的嘴,冈部承诺只要真由理回答出这个问题,就给她买一车的香蕉:一开始有$n$个人围成一个圈,从$1$开始顺时针报数,报出$m$的人被 ...