HDU-4089 Activation (概率DP求概率)
题目大意:一款新游戏注册账号时,有n个用户在排队。每处理一个用户的信息时,可能会出现下面四种情况:
1.处理失败,重新处理,处理信息仍然在队头,发生的概率为p1;
2.处理错误,处理信息到队尾重新排队,发生的概率为p2;
3.处理成功,队头信息处理成功,出队,发生的概率为p3;
4.服务器故障,队伍中所有信息丢失,发生的概率为p4;
小明现在在队伍中的第m个位置,问当他前面的信息条数不超过k-1时服务器故障的概率。
题目分析:这道题的状态转移方程不难写。定义状态dp(i,j)表示在有 i 个人的队伍中,他排在第 j 个位置时到达要求状态的概率。则状态转移方程为:
dp(i,1)=p1*dp(i,1)+p2*dp(i,i)+p4
dp(i,j)=p1*dp(i,j)+p2*(i,j-1)+p3*dp(i-1,j-1)+p4 (2<=j<=k)
dp(i,j)=p1*dp(i,j)+p2*(i,j-1)+p3*dp(i-1,j-1) (k<j<=i)
整理一下,并另p21=p2/(1-p1),p31=p3/(1-p1),p41=p4/(1-p1),则得到:
dp(i,1)=p21*dp(i,i)+p41
dp(i,j)=p21*dp(i,j-1)+p31*dp(i-1,j-1)+p41 (2<=j<=k)
dp(i,j)=p21*dp(i,j-1)+p31*dp(i-1,j-1) (k<j<=i)
这样就可以通过递推求解。
为了书写方便,把上面的三个转移方程用两个方程表示出来:
dp(i,1)=p21*dp(i,i)+c(1)
dp(i,j)=p21*dp(i,j-1)+c(j) (2<=j<=i)
dp(i,i)可以通过迭代得到:
(1-p21^i)dp(i,i)=∑(p21^(i-j))*c(j) (1<=j<=i)
ps:得加特判,否则会WA!!。。。
代码如下:
# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstring>
# include<algorithm>
using namespace std; const double eps=1e-5; int n,m,k;
double p1,p2,p3,p4;
double dp[2005][2005]; int main()
{
while(~scanf("%d%d%d",&n,&m,&k))
{
scanf("%lf%lf%lf%lf",&p1,&p2,&p3,&p4);
if(p4<eps){
printf("0.00000\n");
continue;
}
double p21=p2/(1-p1);
double p31=p3/(1-p1);
double p41=p4/(1-p1);
dp[1][1]=p41/(1-p21);
for(int i=2;i<=n;++i){
dp[i][i]=0;
for(int j=1;j<=i;++j){
if(j==1) dp[i][i]+=pow(p21,i-j)*p41;
else if(j>=2&&j<=k) dp[i][i]+=pow(p21,i-j)*(p31*(dp[i-1][j-1])+p41);
else dp[i][i]+=pow(p21,i-j)*p31*dp[i-1][j-1];
}
dp[i][i]/=(1-pow(p21,i));
for(int j=1;j<i;++j){
if(j==1) dp[i][j]=p21*dp[i][i]+p41;
else if(j>=2&&j<=k) dp[i][j]=p21*dp[i][j-1]+p31*dp[i-1][j-1]+p41;
else dp[i][j]=p21*dp[i][j-1]+p31*dp[i-1][j-1];
}
}
printf("%.5lf\n",dp[n][m]);
}
return 0;
}
HDU-4089 Activation (概率DP求概率)的更多相关文章
- CoderForce 148D-Bag of mice (概率DP求概率)
题目大意:美女与野兽在玩画鸽子的游戏.鸽子在用黑布遮住的笼子里,白色的有w只,黑色的有b只,每次拿出一只作画,谁先画到白色的鸽子谁就赢.美女首先画,因为野兽太丑,它每次画的时候都会吓跑一只鸽子,所有出 ...
- HDU3853-LOOPS(概率DP求期望)
LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Su ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- POJ2096 Collecting Bugs(概率DP,求期望)
Collecting Bugs Ivan is fond of collecting. Unlike other people who collect post stamps, coins or ot ...
- HDU 4089 Activation 概率DP 难度:3
http://acm.hdu.edu.cn/showproblem.php?pid=4089 这道题中一共有两个循环: 1.事件1 如果一直落在Activation failed事件上,那么就会重新继 ...
- HDU 4089 Activation:概率dp + 迭代【手动消元】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人在排队激活游戏,Tomato排在第m个. 每次队列中的第一个人去激活游戏,有可能 ...
- HDU 3853 LOOP (概率DP求期望)
D - LOOPS Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit St ...
- HDU 4405 Aeroplane chess (概率DP求期望)
题意:有一个n个点的飞行棋,问从0点掷骰子(1~6)走到n点须要步数的期望 当中有m个跳跃a,b表示走到a点能够直接跳到b点. dp[ i ]表示从i点走到n点的期望,在正常情况下i点能够到走到i+1 ...
随机推荐
- [windows驱动]windows8.1驱动调试前戏
人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...
- 项目管理软件kanboard安装
1. php环境 2. php扩展
- Python入门(一,Ubuntu环境搭建)
一,Python下载 下载地址:http://www.python.org/download/ 二,安装 在Ubuntu平台上安装Python步骤: 1.解压缩下载的源码压缩包 2.在解压缩的目录下执 ...
- linux常用命令:2权限管理命令
权限管理命令 1.权限管理命令:chmod 命令名:chmod 命令英文原意:change the permissions mode of a file 命令所在路径:/bin/chmod 执行权限: ...
- 神奇彩带KMP
描述 有两条彩带A,B,如果能制作出一条彩带,这条彩带既是彩带A的前缀,又是彩带B的后缀,称之为神奇彩带 草滩小王子想送一条最长的神奇彩带给拉面女神 给你两条彩带,你能找到最大的神奇彩带的长度是多少吗 ...
- HDU 5644 (费用流)
Problem King's Pilots (HDU 5644) 题目大意 举办一次持续n天的飞行表演,第i天需要Pi个飞行员.共有m种休假计划,每个飞行员表演1次后,需要休假Si天,并提供Ti报酬来 ...
- [转]BEHAVOUR TREE2
上次提到了一些行为树的基本概念,包括行为节点,控制节点(选择,序列,并行),这次来更多,更深入的讨论行为树的一些东西,如果对行为树不是很了解,请参看这里. 一. 关于选择节点的讨论 我们说过选择节点的 ...
- 第一个Sprint冲刺第六天
讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:解决编写代码的问题 讨论地点:宿舍 进展:已开始对代码的编写
- Yocto 包管理 apt-get
/******************************************************************** * Yocto 包管理 apt-get * 说明: * 查一 ...
- 设置viewport进行缩放
<meta name="viewport" content="width=320,maximum-scale=1.3,user-scalable=no"& ...