UVA 11427 Expect the Expected [概率]

  一个游戏胜利的概率为p,小明每天晚上都会玩这个游戏直到胜利的比例大于p为止,他就会认为今天胜利了,但每天至多只能玩N次。小明会一直玩这个游戏直到有一天失败为止。求小明玩这个游戏天数的期望。

  首先,假设小明每天玩这个游戏胜利的概率为q,根据期望公式有S=∑i*q^i*(1-q)。用数学方法化简可以得到S=1/(1-q),现在问题就转化为求q。

  直接用概率论没想出来怎么搞,由于N比较小,可以想到用DP来解,用d[i][j]表示第i天赢了j次并且目前没有获得胜利的概率,有d[i][j]=d[i-1][j-1]*p+d[i-1][j]*(1-p)。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int cas, n, p1, p2;
 4 double p, d[110][110];
 5 int main(){
 6     //freopen("test.in", "r", stdin);
 7     scanf("%d", &cas);
 8     for (int ca = 1; ca <= cas; ca++) {
 9         scanf("%d/%d%d", &p1, &p2, &n);
10         p = p1*1.0/p2;
11         memset(d, 0, sizeof d);
12         d[1][0] = 1-p;
13         for (int i = 2; i <= n; i ++) {
14             for (int j = 0; p2*j <= p1*i; j++) {
15                 d[i][j] += d[i-1][j]*(1-p);
16                 if (j > 0) d[i][j] += d[i-1][j-1]*p;
17             }
18         }
19         double t = 0;
20         for (int i = 0; i*p2 <= p1*n; i++) t += d[n][i];
21         printf("Case #%d: %d\n", ca,  (int)(1/t));
22     }
23     return 0;
24 }

 

posted @ 2012-10-30 00:45  Burn_E  阅读(241)  评论(0编辑  收藏  举报