概率DP HDU 4586 play the dice

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4586

解题思路:

只考虑第一次,获得的金币的平均值为sum/n.sum为所有色子的面的金币值相加。

对于运气好,摇中了可以再来一次,该轮就能获得m/n*(sum/n)

运气好,又再来一次,该轮能获得(m/n)^2*(sum/n)

无穷无尽的摇下去,一共能获得sum/n*(1+p + p^2+`````+p^k + ````),其中p = m/n

将式子化简,就能得到E = sum/(n-m)。所以当sum = 0时为0,n=m时为inf。其余就为sum/(n-m)。

贴代码:

 1 #include<cstdio>
 2 int main()
 3 {
 4 //    freopen("in.c","r",stdin);
 5     int n,m,a;
 6     while(~scanf("%d",&n))
 7     {
 8         int sum =0;
 9         for(int i=0; i<n; ++i)
10         {
11             scanf("%d",&a);
12             sum += a;
13         }
14         scanf("%d",&m);
15         for(int i=0; i<m; ++i)
16             scanf("%d",&a);
17         if(sum == 0) printf("0.00
");
18         else if(n == m )printf("inf
");
19         else printf("%.2f
",(double)sum/(n-m));
20     }
21     return 0;
22 }
View Code
原文地址:https://www.cnblogs.com/allh123/p/3265198.html