HDU 4089 Activation 概率DP 难度:3
http://acm.hdu.edu.cn/showproblem.php?pid=4089
这道题中一共有两个循环:
1.事件1 如果一直落在Activation failed事件上,那么就会重新继续直到出现事件2,3,或4为止,
这样 进入事件2的概率是p2'=p2+p2*p1+p2*p1*p1........解这个无穷级数得到p2'=p2/(1-p1),同理,p3'=p3/(1-p1),p4=p4/(1-p1)
2.事件2
设dp[i][j]为队列长度为i,主角在j时满足条件的概率,则
当j==1:
dp[i][1]=dp[i][i]*p2'+p4'
1<=j<=k:
dp[i][j]=dp[i][j-1]*p2'+dp[i-1][j-1]*p3'+p4'
j>=k:
dp[i][j]=dp[i][j-1]*p2'+dp[i-1][j-1]*p3'
很明显,所有dp[i][j]都可以由dp[i][i]表示,且dp[i][i]的系数为p2'^j,常数项则为
c[j]=p3*p[cnt^1][j-1]+c[j-1]*p2+p4 if j<=k then 0;
那么首先解出c[i],然后即可得到dp[i][i],然后代回得到dp[i][j]即可
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=2e3+;
const double eps=1e-;
int n,m,k;
double p1,p2,p3,p4;
double tp2[maxn];
double p[][maxn],c[maxn];
void calc(){
//memset(p,0,sizeof(p));
p[][]=p4/(-p2);
int cnt=;
for(int i=;i<=n;i++){
for(int j=;j<=k;j++){
c[j]=p3*p[cnt^][j-]+c[j-]*p2+p4;
}
for(int j=k+;j<=i;j++){
c[j]=p3*p[cnt^][j-]+c[j-]*p2;
}
p[cnt][i]=c[i]/(-tp2[i]);
for(int j=;j<i;j++){
p[cnt][j]=tp2[j]*p[cnt][i]+c[j];
}
cnt^=;
}
} int dcmp(double a,double b){
if(fabs(a-b)<=eps)return ;
return a>b?:-;
}
int main(){
while(scanf("%d%d%d",&n,&m,&k)==){
scanf("%lf%lf%lf%lf",&p1,&p2,&p3,&p4);
if(dcmp(p1,)==||p4<=1e-){
printf("%.5f\n",0.0);
continue;
}
else {
p2/=(-p1);
p3/=(-p1);
p4/=(-p1);
}
tp2[]=;
for(int i=;i<=n;i++){
tp2[i]=tp2[i-]*p2;
}
calc();
printf("%.5f\n",p[n&][m]);
}
return ;
}
HDU 4089 Activation 概率DP 难度:3的更多相关文章
- [HDU 4089]Activation[概率DP]
题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...
- Activation HDU - 4089(概率dp)
After 4 years' waiting, the game "Chinese Paladin 5" finally comes out. Tomato is a crazy ...
- Activation HDU - 4089 (概率DP)
kuangbin的博客 强 #include <bits/stdc++.h> using namespace std; const int MAXN = 2005; const doubl ...
- HDU 4050 wolf5x 概率dp 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=4050 题意: 现在主角站在0处,需要到达大于n的位置 主角要进入的格子有三种状态: 0. 不能进入 1. 能进入 ...
- HDU 4089 Activation(概率DP)(转)
11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况. 像概率dp,公式推出来就很容易写 ...
- HDU 3853LOOPS(简单概率DP)
HDU 3853 LOOPS 题目大意是说人现在在1,1,需要走到N,N,每次有p1的可能在元位置不变,p2的可能走到右边一格,有p3的可能走到下面一格,问从起点走到终点的期望值 这是弱菜做的第 ...
- HDU - 1099 - Lottery - 概率dp
http://acm.hdu.edu.cn/showproblem.php?pid=1099 最最简单的概率dp,完全是等概率转移. 设dp[i]为已有i张票,还需要抽几次才能集齐的期望. 那么dp[ ...
- HDU 4405 【概率dp】
题意: 飞行棋,从0出发要求到n或者大于n的步数的期望.每一步可以投一下筛子,前进相应的步数,筛子是常见的6面筛子. 但是有些地方可以从a飞到大于a的b,并且保证每个a只能对应一个b,而且可以连续飞, ...
- HDU 4576 Robot(概率dp)
题目 /*********************复制来的大致题意********************** 有N个数字,M个操作, 区间L, R. 然后问经过M个操作后落在[L, R]的概率. * ...
随机推荐
- vi_命令
1.文件末尾新增一行: 非编辑模式下,按大写的G 跳到最后一行. 然后按小写的O键,增加一行. 2.删掉一行: 非编辑状态下,光标定位到要删除的那一行,然后 dd 3.删字符 在非插入模式下,把光标 ...
- Java将其他数据格式转换成json字符串格式
package com.wangbo.util; import java.beans.IntrospectionException; import java.beans.Introspector; i ...
- 共享内存 最快IPC 的原因
参考 http://www.360doc.com/content/13/0817/11/7377734_307777806.shtml 我的理解,这里指的是用户进程的用户态空间和内核空间,也就是那个3 ...
- BigDecimal类型比较大小
这个类是java里精确计算的类 1 比较对象是否相等 一般的对象用equals,但是BigDecimal比较特殊,举个例子: BigDecimal a=BigDecimal.value ...
- 软技能:十步学习法 (zhuan)
http://www.gyzhao.me/2016/11/07/Ten-Step-Learning-Method/ ****************************************** ...
- PKCS #1 RSA Encryption Version 1.5
PKCS #1 RSA Encryption Version 1.5 在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式 ...
- linux特殊字符
linux特殊字符: * 匹配文件名中的任何字符串,包括空字符串. ? 匹配文件名中的任何单个字符. [...] 匹配[ ]中所包含的任何字符. [!...] 匹配[ ]中非感叹号!之后的字符. 当s ...
- hiho_1048_状态压缩2
题目大意 用1x2的单元拼接出 NxM的矩形,单元可以横放或者纵放,N < 1000, M <= 5. 求不同的拼接方案总数. 分析 计算机解决问题的基本思路:搜索状态空间.如果采用dfs ...
- a++ ++a 文件上传函数错误 smarty模板特点
b = a++; 会先把a初始的值赋值给b,然后a自增1. c = ++a; 先把a自增1,再把增1以后的结果赋值给c. 只要记住在使用的时候 $a++ 是先返回$a,再将$a本身的值改变. ...
- 屏幕输出VS文件输出
问题1:我们在编写程序时经常需要数一些数据到屏幕,来查看我们的结果是否正确,虽然直接输出到屏幕,查看起来呢很方便,但当数据量很大时,需要耗费大量的时间.于是我们想到能不能通过输出到文件来减少时间 ...