UVA.11427.Expect the Expected(期望)
阿新 • • 發佈:2018-09-20
str problem 題目 span pri 當前 .org += int 。
所以\(E=Q+(1-Q)\times(E+1)\),解得\(E=\frac 1Q\)。
題目鏈接
\(Description\)
https://blog.csdn.net/Yukizzz/article/details/52084528
\(Solution\)
首先每一天之間是獨立的。
所以設\(f[i][j]\)為前\(i\)天贏了\(j\)局的概率,要滿足當前獲勝比例始終≤\(p\)。容易得出轉移方程。
所以玩完\(n\)局之後獲勝比例仍不超過\(p\)的概率為\(Q=\sum_{i=0}^{\frac in\leq p}f[n][i]\)。
設\(E\)為期望玩牌天數。有兩種情況:
1.\(Q\)的概率不再玩了,期望為\(Q\times1\);
2.\(1-Q\)的概率第二天接著玩,期望為\((1-Q)\times(E+1)\)
所以\(E=Q+(1-Q)\times(E+1)\),解得\(E=\frac 1Q\)。
有點迷,但好像也確實是這樣。。
#include <cstdio> #include <algorithm> const int N=105; double f[N][N]; void Work(int T) { int a,b,n; scanf("%d/%d%d",&a,&b,&n); double p=1.0*a/b; f[0][0]=1; for(int i=1; i<=n; ++i) { f[i][0]=f[i-1][0]*(1-p); for(int j=1; j<=i; ++j) f[i][j]=0;//! for(int j=1; j*b<=i*a; ++j) f[i][j]=f[i-1][j]*(1-p)+f[i-1][j-1]*p; } double q=0; for(int i=0; i*b<=n*a; ++i) q+=f[n][i]; printf("Case #%d: %d\n",T,(int)(1.0/q));//直接.0lf是四舍五入... } int main() { int T; scanf("%d",&T); for(int i=1; i<=T; Work(i++)); return 0; }
UVA.11427.Expect the Expected(期望)