uva-11021-全概率公式

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\n",++cas,pow(f[m],k));
37     }
38     return 0; 
39 }

猜你喜欢

转载自www.cnblogs.com/zzqc/p/8976911.html