uvalive5721 Activation(概率dp)
2015-06-02 02:06
375 查看
关键词:循环状态转移方程
题意:一个人在银行排队,一开始在n个人中排第m位。共四种情况。1.未处理队首元素,下次重新处理2.与队首元素失去联系,将其放入队尾3.处理队首元素,队首元素永久离队4.系统崩溃,不再处理任何元素。以上四种事件在每次处理时发生的概率分别为p1-p4。求排在他前面的人数小于K时,系统崩溃的概率。
解法:概率dp
1.dp[i][j]:共i人在他前面有j人,到达目标状态的概率
2.j!=1时:dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1]+p4*(j<=k)
j==1时,将dp[i][j-1]换成dp[i][i]
目标状态时dp
[m]:共n人在他前面有m人,排在他前面的人数小于K时,系统崩溃的概率
注意:方程存在循环,因此需要将其中一个解出来,以此为基础根据递推式求解其他状态
题意:一个人在银行排队,一开始在n个人中排第m位。共四种情况。1.未处理队首元素,下次重新处理2.与队首元素失去联系,将其放入队尾3.处理队首元素,队首元素永久离队4.系统崩溃,不再处理任何元素。以上四种事件在每次处理时发生的概率分别为p1-p4。求排在他前面的人数小于K时,系统崩溃的概率。
解法:概率dp
1.dp[i][j]:共i人在他前面有j人,到达目标状态的概率
2.j!=1时:dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1]+p4*(j<=k)
j==1时,将dp[i][j-1]换成dp[i][i]
目标状态时dp
[m]:共n人在他前面有m人,排在他前面的人数小于K时,系统崩溃的概率
注意:方程存在循环,因此需要将其中一个解出来,以此为基础根据递推式求解其他状态
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<iostream> #include<vector> #include<map> #include<set> #define ll long long using namespace std; const int maxn = 2000+10; int n,m,k; const double eps=1e-5; double p1,p2,p3,p4; double dp[maxn][maxn]; double c[maxn]; double p[maxn]; void init(){ p[0]=1.0; p[1]=p2/(1.0-p1); for(int i=2;i<=n;i++) p[i]=p[i-1]*p[1]; } int main(){ //freopen("a.txt","r",stdin); while(scanf("%d%d%d%lf%lf%lf%lf",&n,&m,&k,&p1,&p2,&p3,&p4)!=EOF){ if(p4<eps){ printf("0.00000\n"); continue; } memset(dp,0,sizeof(dp)); init(); dp[1][1]=p4/(1.0-p1-p2); for(int i=2;i<=n;i++){ for(int j=1;j<=i;j++){ if(j==1) c[j]=p4; else if(j<=k) c[j]=p3*dp[i-1][j-1]+p4; else c[j]=p3*dp[i-1][j-1]; } double tmp=0.0; for(int j=1;j<=i;j++){ tmp+=(c[j]/(1.0-p1)*p[i-j]); } dp[i][i]=tmp/(1.0-p[i]); dp[i][1]=(p2*dp[i][i]+c[1])/(1.0-p1); for(int j=2;j<i;j++){ dp[i][j]=(p2*dp[i][j-1]+c[j])/(1.0-p1); } } printf("%.5lf\n",dp [m]); } return 0; }
相关文章推荐
- 解决NGUI与粒子系统的遮挡问题
- 深入理解javascript new的机制
- UNITY 4.6.4 发行说明 中文版
- Mac 平台搭建 Android 集成开发环境
- 2015baidu复赛 矩形面积(包凸 && ps:附quickhull模板)
- 第一天开通博客园博客的感受
- 人月神话:有多传奇?
- struts2使用struts2-bootstrap-plugin插件
- 刘(白书)之数论:约数、模线性方程
- 英语学习-语法-实词-名词
- FastJson
- Terminating app due to uncaught
- Netty HTTP 服务端入门开发
- ubuntu 15.04 下 GFirefly环境搭建和运行出现的问题和解决方案
- 让开发效率爆表的Guava ---- Table矩阵
- Android Studio 使用技巧(6)
- Android Studio 使用技巧(5)
- C语言 文件I/O:实现结构体数据 存储到文件和从文件读取
- Android Studio 使用技巧(4)
- MySQL5.5 RPM安装的默认安装路径