f[i]表示1只麻球及他的子孙在i天后全部死亡的概率。
那么可以得到递推式: f[i] = P0+P1*f[i-1]+P2*f[i-1]^2+…… 也就是说生出j只的概率并且这j只及其子孙在i-1天后死亡的概率的乘积。
因为每只麻球的死亡时相互独立的,所以算出一只麻球的f[m]后k只麻球的死亡概率就是 f[m]^k。
#include <iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
using namespace std;
double f[1100],p[1100];
int main()
{
int t;
int n,k,m;
scanf("%d",&t);
int cas = 1;
while(t--)
{
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);
}
double ans = pow(f[m],k);
printf("Case #%d: %.7lf\n",cas++,ans);
}
return 0;
}