UVA 11021 Tribles 概率dp

首先给出 k k k个毛球,然后这些毛球的寿命都只有一天。并且他们会有 p i p_{i} pi的概率生繁衍出 i i i个新的毛球。 i i i的范围是在 1 1 1 n n n的,然后求问第 m m m天的时候这些毛球全部死亡的概率是多少。
k k k个毛球在 m m m死亡的概率相等且独立。考虑 1 1 1个毛球在 m m m天死亡的概率是 f m f_{m} fm k k k个毛球在第 m m m天死亡的概率为 ( f m ) k (f_{m})^k (fm)k f i = ∑ j = 0 n − 1 p j ( f i − 1 ) j f_{i}=\sum_{j=0}^{n-1}p_{j}(f_{i-1})^{j} fi=j=0n1pj(fi1)j,而初始条件第一天死亡的概率 f 1 = p 0 f_{1}=p_{0} f1=p0

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll INF=LONG_LONG_MAX;
const int N=1e3+7; 
double dp[N];
double p[N];
int main() {
	int T,kase=0; 
	scanf("%d",&T);
	while(T--) {
		int n,k,m;
		scanf("%d%d%d",&n,&k,&m); 
		for(int i=0;i<n;i++)
			scanf("%lf",&p[i]);
		memset(dp,0,sizeof(dp)); 
		dp[1]=p[0];
		for(int i=2;i<=m;i++) {
			for(int j=0;j<n;j++) {
				dp[i]+=p[j]*pow(dp[i-1],j);
			}
		}
		printf("Case #%d: %.7lf\n",++kase,pow(dp[m],k));
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值