一个游戏胜利的概率为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 }