UVA11021 Tribles(概率dp)
阿新 • • 發佈:2022-03-18
題目
題意翻譯
題目大意
一開始有kk種生物,這種生物只能活1天,死的時候有p[i]的概率產生i只這種生物(也只能活一天),詢問m天內所有生物都死的概率(包括m天前死亡的情況)
輸入格式
第一行輸入一個整數T,表示資料總數
每一組先輸入三個整數n(1<=n<=1000),k(0<=k<=1000),m(0<=m<=1000)
然後輸入n個整數,分別為p_0到p_{n-1}p
輸出格式
對於每一組資料,先輸出"Case #x: " 再輸出答案,精度要求在1e-6以內
感謝@xMinh 提供翻譯
思路
每個麻球是互相獨立的,所以求出一個麻球的概率然後用乘法規則即可求出k個麻球的概率。
轉移時考慮這個麻球第1天繁衍多少個,它們在接下來的i−1天內死絕了。
程式碼
#include <bits/stdc++.h> using namespace std; #define ll long long const int maxn = 1e6 + 10; #define PII pair<int, int> double a[maxn]; double f[1010]; int main() { int t;cin>>t; for(int cnt=1;cnt<=t;cnt++){ int n,k,m;cin>>n>>k>>m; memset(f,0,sizeof f); memset(a,0,sizeof a); for(int i=0;i<n;i++){ cin>>a[i];//有a[0]的概率生出0個後代 } f[1]=a[0]; for(int i=2;i<=m;i++){ for(int j=0;j<n;j++){ f[i]+=a[j]*pow(f[i-1],j); } } printf("Case #%lld: %.7lf\n",cnt,pow(f[m],k)); } return 0; }