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 }
“这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”