https://vjudge.net/problem/UVA-11021
有n个球,每只的存活期都是1天,他死之后有pi的概率产生i个球(0<=i<n),一开始有k个球,问m天之后所有球都死完的概率(m天之前都死完也算m天之前的)。由于每个球的成长与死亡都是独立的所以我们可以分开讨论,设f(i)表示初始1个球的情况下i天死光的概率,那么答案就是pow(f(m),k)。现在只要求出f(m)即可,利用全概率公式 f(i)=P(0)+P(1)*f(i-1)+P(2)*f(i-1)2+...+P(n-1)*f(i-1)n-1.
1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 #include<cstdio> 5 #include<stack> 6 #include<set> 7 #include<map> 8 #include<cmath> 9 #include<ctime> 10 #include<time.h> 11 #include<algorithm> 12 using namespace std; 13 #define mp make_pair 14 #define pb push_back 15 #define debug puts("debug") 16 #define LL long long 17 #define pii pair<int,int> 18 #define eps 1e-12 19 double P[1010]; 20 double f[1010]; 21 int main() 22 { 23 int n,m,i,j,k,t; 24 int cas=0; 25 cin>>t; 26 while(t--){ 27 scanf("%d%d%d",&n,&k,&m); 28 for(i=0;i<n;++i) scanf("%lf",P+i); 29 f[1]=P[0]; 30 for(i=2;i<=m;++i){ 31 f[i]=0; 32 for(j=0;j<n;j++){ 33 f[i]+=P[j]*pow(f[i-1],j); 34 } 35 } 36 printf("Case #%d: %.7f ",++cas,pow(f[m],k)); 37 } 38 return 0; 39 }