1. 程式人生 > >uva-11021-全概率公式

uva-11021-全概率公式

sta mes -- href string 產生 公式 problem scanf

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 }

uva-11021-全概率公式