题解 UVA11021 【Tribles】

Ezio_0420

2018-02-27 14:33:34

Solution

只要知道全概率公式,这就是一道水题。因为麻球的各种活动都互不影响,所以现在只考虑一只麻球,我们假设f[i]是第i天全部都死亡的概率,那么 f[i] = p0 + p1*f[i-1] + p2*f[i-1]^2 + ...pn-1*f[i - 1]^(n-1) 也就是用前一天的全部死亡概率来代替今天的每一只死亡的概率,又因为今天的每只的生死概率什么的都是独立的,所以p2*f[i-1]^2可以理解成剩下2只,然后两只都死了,这样最后在第m天死光的概率就是f[m],但是这个只是一只麻球的,所有麻球都死光是f[m]^k。 ```cpp #include<cstdio> #include<cmath> const int maxn = 1000 + 10; const int maxm = 1000 + 10; int n, k, m; double P[maxn], f[maxm]; int main() { int T; scanf("%d", &T); for(int kase = 1; kase <= T; kase++) { scanf("%d%d%d", &n, &k, &m); for(int i = 0; i < n; i++) scanf("%lf", &P[i]); f[0] = 0; f[1] = P[0]; for(int i = 2; i <= m; i++) { f[i] = 0; for(int j = 0; j < n; j++) f[i] += P[j] * pow(f[i-1], j); } printf("Case #%d: %.7lf\n", kase, pow(f[m], k)); } return 0; } ```