UVa 11021 (概率 递推) Tribles

Tribble是麻球?

因为事件都是互相独立的,所以只考虑一只麻球。

设f(i)表示一只麻球i天后它以及后代全部死亡的概率,根据全概率公式:

f(i) = P0 + P1 * f(i-1) + P2 * f(i-1)2 + ... + Pn * f(n)n

每个麻球死亡是独立的,所以Pj * f(i-1)j 表示生了j个麻球,这j个麻球要在i-1天内全部死亡。

 1 #include <cstdio>
 2 #include <cmath>
 3 using namespace std;
 4 
 5 const int maxn = 1000 + 10;
 6 double f[maxn], p[maxn];
 7 
 8 int main()
 9 {
10     //freopen("in.txt", "r", stdin);
11 
12     int T;
13     scanf("%d", &T);
14     for(int kase = 1; kase <= T; kase++)
15     {
16         int n, k, m;
17         scanf("%d%d%d", &n, &k, &m);
18         for(int i = 0; i < n; i++) scanf("%lf", &p[i]);
19         f[0] = 0;
20         f[1] = p[0];
21         for(int i = 1; i <= m; i++)
22         {
23             f[i] = 0;
24             for(int j = 0; j < n; j++) f[i] += p[j] * pow(f[i-1], j);
25         }
26         printf("Case #%d: %.7f
", kase, pow(f[m], k));
27     }
28 
29     return 0;
30 }
代码君
原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4326367.html