题目大意:一款新游戏注册账号时,有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求概率)的更多相关文章

  1. CoderForce 148D-Bag of mice (概率DP求概率)

    题目大意:美女与野兽在玩画鸽子的游戏.鸽子在用黑布遮住的笼子里,白色的有w只,黑色的有b只,每次拿出一只作画,谁先画到白色的鸽子谁就赢.美女首先画,因为野兽太丑,它每次画的时候都会吓跑一只鸽子,所有出 ...

  2. HDU3853-LOOPS(概率DP求期望)

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Su ...

  3. HDU 4089 Activation(概率DP)(转)

    11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况.   像概率dp,公式推出来就很容易写 ...

  4. [HDU 4089]Activation[概率DP]

    题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...

  5. POJ2096 Collecting Bugs(概率DP,求期望)

    Collecting Bugs Ivan is fond of collecting. Unlike other people who collect post stamps, coins or ot ...

  6. HDU 4089 Activation 概率DP 难度:3

    http://acm.hdu.edu.cn/showproblem.php?pid=4089 这道题中一共有两个循环: 1.事件1 如果一直落在Activation failed事件上,那么就会重新继 ...

  7. HDU 4089 Activation:概率dp + 迭代【手动消元】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4089 题意: 有n个人在排队激活游戏,Tomato排在第m个. 每次队列中的第一个人去激活游戏,有可能 ...

  8. HDU 3853 LOOP (概率DP求期望)

    D - LOOPS Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit St ...

  9. HDU 4405 Aeroplane chess (概率DP求期望)

    题意:有一个n个点的飞行棋,问从0点掷骰子(1~6)走到n点须要步数的期望 当中有m个跳跃a,b表示走到a点能够直接跳到b点. dp[ i ]表示从i点走到n点的期望,在正常情况下i点能够到走到i+1 ...

随机推荐

  1. idea使用generator自动生成model、mapper、mapper.xml(转)

    原文链接:http://www.mamicode.com/info-detail-445217.html TEP 0.在Intellij IDEA创建maven项目(本过程比较简单,略) STEP 1 ...

  2. T-sql语句

    在用代码编辑数据库时,首先要启动WAMPSERVER 1.创建表 create table Car ( Code varchar(50) primary key , Name varchar(50) ...

  3. JS原生回到顶部效果

    // 回到顶部 onload = function () { var oBtnTop = document.getElementById('toTop'); var timer = null; oBt ...

  4. struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)

    在同一个项目中间,如果既用到servlet有用了struts2的框架,运行项目时可能无法正常使用servlet,原因是在配置struts2的核心控制器时<url-pattern>/*< ...

  5. 使用Qemu调试内核

    利用Qemu进行内核源码级调试 http://blog.csdn.net/gdt_a20/article/details/7231652 用Qemu调试Linux内核 http://blog.chin ...

  6. [zz]Java中的instanceof关键字

    1.What is the 'instanceof' operator used for? stackoverflow的一个回答:http://stackoverflow.com/questions/ ...

  7. C# delegate & event

    public delegate void MyDelegate(string mydelegate);//声明一个delegate对象 //实现有相同参数和返回值的函数        public v ...

  8. 【LeetCode OJ】Interleaving String

    Problem Link: http://oj.leetcode.com/problems/interleaving-string/ Given s1, s2, s3, find whether s3 ...

  9. Mac OS 使用Git

    入门教程的流程: 什么是Git----------------->为什么选择Git----------------->如何安装Git到MAC OS X------------------& ...

  10. IOS 封装类的时候注释格式,使用的时候可以想官方库一样快捷显示

    /** @brief 详情 @param 参数 @note 注意 @return 返回值类型 @code 这里写例题代码 @endcode @see 相似的方法参考 */