本文是刘汝佳《算法竞赛入门经典——训练指南》的读书笔记,详见原书 (P140).
知识点: 概率与期望
解题思路:
我们先考虑一只麻球的情况,设 (f(i)) 为 (i) 天后所有麻球均死亡的概率。则
(f(0) = 0,)
(f(1) = P_0,)
(f(2) = P_0 + P_1 cdot f(1) + P_2 cdot f^{2}(1) + ... + P_{n-1} cdot f^{n-1}(1),)
(......)
(f(m) = P_0 + P_1 cdot f(m-1) + P_2 cdot f^{2}(m-1) + ... + P_{n-1} cdot f^{n-1}(m-1). )
由于每只麻球的生殖相互独立,故答案即为 (f^{k}(m)).
AC代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 double p[1010]; 5 double f[1010]; 6 int main(){ 7 int T,n,k,m; 8 scanf("%d",&T); 9 for(int t=1;t<=T;t++){ 10 scanf("%d%d%d",&n,&k,&m); 11 for(int i=0;i<n;i++) 12 scanf("%lf",&p[i]); 13 printf("Case #%d: ",t); 14 if(m==0) printf("0.0000000 "); 15 else{ 16 f[1]=p[0]; 17 for(int i=2;i<=m;i++){ 18 f[i]=0; 19 double tmp=1; 20 for(int j=0;j<n;j++){ 21 f[i]+=p[j]*tmp; 22 tmp*=f[i-1]; 23 } 24 } 25 double ans=1; 26 for(int i=0;i<k;i++) ans*=f[m]; 27 printf("%.7lf ",ans); 28 } 29 } 30 return 0; 31 }