题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1962
题目大意:给你K个毛球,每个毛球只能生存一天,但是每个毛球都有pi的概率繁殖i个毛球,问第 m 天后所有毛球死亡的概率。(所有毛球独立存在,互不影响)
解题思路:首先,由于每个毛球互不影响,所以K只毛球m天后的死亡概率 就是一只毛球m 天后死亡的概率的k次方。接下来就分析一只毛球:假设一只毛球在第i天后全部死亡的概率为f[i],则可知第一天后这只毛球全部死亡的概率即为 该毛球繁殖0只毛球的概率,即f[0]。
由全概率公式可知:f[i]=p0+p1*f[i-1]+p2*f[i-1]^2+p3*f[i-1]^3+...+p(n-1)*f[i-1]^(n-1).
其中 pj*f[i-1]^j 表示这个毛球 生了j个后代,他们在i-1 天后全部死亡。 故k个毛球 m 天后死亡的概率为 f[m]^k;
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int T,n,k,m,cas=1;
double p[1010],f[1010];
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&k,&m);
for(int i=0;i<n;i++)
scanf("%lf",&p[i]);
f[0]=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;
}