UVa 11021 麻球繁衍
https://vjudge.net/problem/UVA-11021
题意:
有k只麻球,每只活一天就会死亡,临死之前可能会生出一些新的麻球。具体来说,生i个麻球的概率为Pi。给定m,求m天后所有麻球均死亡的概率。
思路:
每只麻球都是独立存活的,也就是说如果一开始如果有两只麻球,我们只需要求出一只麻球的情况就可以了,因为另外一只麻球的情况和这一只是一样的。设f(m)表示初始1只麻球,到第m天全部死亡的概率。
根据全概率公式:
f的上标代表的是生了几只麻球,因为每只麻球的死亡是独立的,所以把它们乘起来即可。
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 7 const int maxn=1000+5; 8 9 int n,k,m; 10 double p[maxn]; 11 double f[maxn]; 12 13 int main() 14 { 15 //freopen("D:\\input.txt","r",stdin); 16 int T; 17 int kase=0; 18 scanf("%d",&T); 19 while(T--) 20 { 21 scanf("%d%d%d",&n,&k,&m); 22 for(int i=0;i<n;i++) 23 scanf("%lf",&p[i]); 24 f[0]=0; 25 f[1]=p[0]; //一只麻球1天后全死完的概率就是生了0只麻球,这个概率也就是p[0] 26 for(int i=2;i<=m;i++) 27 { 28 f[i]=0; 29 for(int j=0;j<n;j++) 30 f[i]+=p[j]*pow(f[i-1],j); 31 } 32 printf("Case #%d: %.7lf\n",++kase,pow(f[m],k)); 33 } 34 return 0; 35 }