题目描述
一开始有k个麻球,每一个麻球有p[i]的概率繁殖i个(0<=i<=n),并且其生命只有一天,求m天后没有毛球的概率
题目分析
如果用二维dp因为麻球最多会有多少个并不确定所以不行。
那么可以考虑:用f[i]表示第i天所以麻球都死光的概率。
假设第一天只有一只麻球,显然
f[1]=p[0];
然后我们推第二天,因为第二天是过了一天的繁衍后,所有繁衍出来的麻球都死光,所以就是:
f[2]=∑i=0np[i]∗f[1]i
同理,有三天的话那就是第一天繁衍了,后来经过两天,所有麻球都死光:
f[3]=∑i=0np[i]∗f[2]i
综上:
f[x]=∑i=0np[i]∗f[x−1]i
代码
#include<iostream>
#include<cstdio>
#include<climits>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int T,n,m,k;
double p[1005],f[1005];
int main()
{
int i,j,cnt=0;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&k,&m);cnt++;
for(i=0;i<n;i++)scanf("%lf",&p[i]);
f[0]=0;f[1]=p[0];
for(i=2;i<=m;i++){
f[i]=0;
for(j=0;j<n;j++)f[i]+=pow(f[i-1],j)*p[j];
}
printf("Case #%d: %.6lf\n",cnt,pow(f[m],k));
}
return 0;
}