UVA11021 Tribles 概率+期望
阿新 • • 發佈:2021-08-04
題目傳送門
題意
現有\(k\)只麻球,每隻麻球只能存活一天,在每隻麻球死前有\(P_i\)的概率生出額外的\(i\)只麻球,求出\(m\)天內所有麻球都死亡的概率。
思路
由於每隻麻球繁衍是獨立進行的,因此我們可以將\(k\)只麻球看作是\(k\)個獨立的族群,於是求出\(m\)天內所有麻球都死亡的概率就可以認為是\(m\)天內\(k\)個族群全部滅絕的概率。由於麻球都只能存活一天,並且獨立存活,因此我們只需要思考一隻麻球的情況,然後推廣到所有即可。
對於一隻麻球來說,假設其第\(i\)天所有後代都死亡的概率為\(f[i]\)。由於獨立性,所有後代都可以看成是第一天的麻球,因此對於第\(i\)
\(P_{j}(f_{i-1})^j\)表示該麻球生了\(j\)個後代,並且全部都在\(i-1\)天內死亡,每個後代死亡的概率均為\(f_{i-1}\),因此根據乘法公式,\(j\)只後代在\(i-1\)天內全部死亡的概率為\((f_{i-1})^j\)。
如此求出\(f[m]\)後,\(k\)只麻球在\(m\)天內滅絕的概率即\(f[m]^k\)。
參考程式碼
點此展開
//Author:Daneii #include <bits/stdc++.h> using namespace std; #define in(x) scanf("%d",&x) #define lin(x) scanf("%lld",&x) #define din(x) scanf("%lf",&x) typedef long long ll; typedef long double ld; typedef pair<int,int> PII; const int N=1010; double p[N]; double f[N]; int main() { int T; in(T); int kase=0; while(T--) { int n,k,m; in(n);in(k);in(m); for(int i=0;i<n;i++) din(p[i]); f[0]=0,f[1]=p[0];//注意初始化 for(int i=2;i<=m;i++) { f[i]=0;//有多組資料,需要清空 for(int j=0;j<n;j++) { f[i]+=p[j]*pow(f[i-1],j); } } printf("Case #%d: %.7lf\n",++kase,pow(f[m],k)); } return 0; }