刘汝佳书上的一道题,UVA11021
一只麻球只能活一天,然后每天会生一次
给出n,k,m
n代表有一只麻球一次最多生n-1只;接下去n行分别是生0到n-1只的概率
k代表一开始有k只麻球;问m天后麻球死光的概率
用f[i]表示一只麻球i天死光的概率
f[i] = p0 + p1 * f(i - 1) + p2 * f(i - 1)^2 + p3 * f(i - 1)^3....pn-1 * f(i - 1)^n-1
递推式的意思是生几只再乘上他们死的概率就好了
算出f[m],答案就是f[m]^k
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 const int maxn=1005; 5 int n,m,k; 6 double f[maxn],p[maxn]; 7 int main() 8 { 9 int T,cas=1; 10 scanf("%d",&T); 11 while(T--) 12 { 13 memset(f,0,sizeof(f)); 14 scanf("%d%d%d",&n,&k,&m); 15 for(int i=0;i<n;i++) scanf("%lf",&p[i]); 16 f[0]=0; 17 f[1]=p[0]; 18 for(int i=2;i<=m;i++) 19 for(int j=0;j<n;j++) 20 f[i]+=p[j]*pow(f[i-1],j); 21 printf("Case #%d: %.7lf ",cas++,pow(f[m],k)); 22 } 23 return 0; 24 }