UVA11021 Tribles(概率dp)
题目
题意翻译
题目大意
一开始有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; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/16023610.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步