UVa 11021 麻球繁衍

https://vjudge.net/problem/UVA-11021

题意:
有k只麻球,每只活一天就会死亡,临死之前可能会生出一些新的麻球。具体来说,生i个麻球的概率为Pi。给定m,求m天后所有麻球均死亡的概率。

思路:

每只麻球都是独立存活的,也就是说如果一开始如果有两只麻球,我们只需要求出一只麻球的情况就可以了,因为另外一只麻球的情况和这一只是一样的。设f(m)表示初始1只麻球,到第m天全部死亡的概率。

根据全概率公式:

UVa 11021 麻球繁衍

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
",++kase,pow(f[m],k));
33     }
34     return 0;
35 }