题目链接:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=22&page=show_problem&problem=1962
每只麻雀的后代都是独立的,所以单独考虑一只麻雀及其后代 (m) 天后均死亡的概率
设 (f[i]) 表示 (i) 天后麻雀均死亡的概率,则由全概率公式,第一只麻雀死亡时产生 (j) 只后代时,(i) 天后均死亡的概率为 (p[j]*f[i-1]^j),即新出生的麻雀在 (i-1) 天后均死亡的概率
最终答案即为 (f[m]^k)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1010;
int T, n, m, k;
double p[maxn], f[maxn];
ll read(){ ll s = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); } return s * f; }
int main(){
scanf("%d", &T);
for(int kase = 1 ; kase <= T ; ++kase){
memset(f, 0, sizeof(f));
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){
for(int j = 0 ; j < n ; ++j){
f[i] += p[j] * pow(f[i-1], j);
}
}
printf("Case #%d: %.7lf
", kase, pow(f[m], k));
}
return 0;
}