概率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\n");
18         else if(n == m )printf("inf\n");
19         else printf("%.2f\n",(double)sum/(n-m));
20     }
21     return 0;
22 }
View Code

 

posted on 2013-08-17 21:44  allh123  阅读(330)  评论(0编辑  收藏  举报

导航