HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

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 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起