UVA 11427 Excpect the Expected 期望+递推
2013-08-07 11:03
381 查看
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; double f[111][111];//f[i][j]表示玩了i盘,共赢了j盘的概率 int main() { int T,tt=0; scanf("%d",&T); while(T--) { int i,j,k,n,m,x,y,ans; double p,q; scanf("%d/%d%d",&x,&y,&n); p=1.0*x/y; memset(f,0,sizeof(f)); f[0][0]=1; for(i=1;i<=n;i++) { f[i][0]=f[i-1][0]*(1-p); for(j=1;j*y<=i*x;j++) { f[i][j]=f[i-1][j]*(1-p)+f[i-1][j-1]*p; } } q=0; for(i=0;i*y<=n*x;i++) q+=f [i]; ans=(int)(1/q); printf("Case #%d: %d\n",++tt,ans); } return 0; } /* 题意:玩纸牌,每天最多玩n盘,每盘胜率为p,每天会一直玩下去直到赢的概率大于p,若有一天玩n盘都还没使胜率大于p则结束, 求玩的天数的期望。 方法:每天玩纸牌独立,可以先求玩一天失败的概率q,再求期望。用f[i][j]表示玩了i盘,共赢了j盘的概率。则可以得到递推式: f[i][j]=f[i-1][j]*(1-p)+f[i-1][j-1]*p;边界处理:f[0][0]=1,其余全是0.还要注意f[i][0]=f[i-1][0]*(1-p); 求得q后,EX=q+2*q*(1-q)+3*q*(1-q)*(1-q)+... 令s=EX/q,s=1+2*(1-q)+3*(1-q)*(1-q)+...,(1-q)*s=(1-q)+2*(1-q)*(1-q)+3*(1-q)^3+... 推出EX=s-(1-q)*s=1+(1-q)+(1-q)^2+...=1*(1-(1-q)^n)/q=1/q(n=∞) */
相关文章推荐
- UVa 11427 Expect the Expected (数学期望 + 概率DP)
- UVa 11427 (期望 DP) Expect the Expected
- uva 11427 Expect the Expected 概率dp求期望
- UVA 11427 Expect the Expected (概率dp+推公式求期望 详解)
- UVA 11427 Expect the Expected【期望】
- UVA 11427 Expect the Expected (期望)
- UVA 11427 - Expect the Expected (概率DP 期望)
- Uva 11427 Expect the Expected 概率dp 求数学期望
- 概率DP,记忆化搜索(Expect the Expected,uva 11427)
- uva 11427 - Expect the Expected(概率)
- UVa11427 Expect the Expected
- UVA - 11427 Expect the Expected (DP+概率)
- uva 11427 Expect the Expected
- UVA 11427 Expect the Expected [概率]
- UVA 11427 - Expect the Expected(概率递归预期)
- Uva 11427 Expect the Expected
- uva 11427 - Expect the Expected(概率)
- UVA 11427 - Expect the Expected
- UVA 11427 Expect the Expected
- UVA 11427 Expect the Expected