UVA11021 Tribles

本文是刘汝佳《算法竞赛入门经典——训练指南》的读书笔记,详见原书 \(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\n");
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\n",ans);
28         }
29     }
30     return 0;
31 }

 

posted @ 2018-03-02 15:46  Blogggggg  阅读(247)  评论(0编辑  收藏  举报