您的位置:首页 > 其它

UVA 11021(概率DP)

2016-03-07 15:57 253 查看
题目链接:UVA 11021

解题思路:

这题算是一道很经典的概率入门题了吧,不过首先得知道可以用pow函数。虽然题目中讲的是K个毛球,但是其实可以考虑一个毛球的情况,之后作K次方即为答案。状态dp[i]表示一个毛球在第 i 天之前死光的概率,因为一直毛球有N种繁衍后代的可能性,dp[i]的值为N种可能性在 i-1 天内死光的可能性之和,状态转移方程为:

dp[i] = p[0]*dp[i-1]^0 + p[1]*dp[i-1]^1 + … + p[N-1]*dp[i-1]^(N-1)

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int K,n,m;
double a[1005],dp[1005],ans;

int main()
{
int T,t=0;
scanf("%d",&T);
while(t<T)
{
scanf("%d %d %d",&n,&K,&m);
for(int i=0;i<n;i++)
scanf("%lf",&a[i]);

dp[1]=a[0];
for(int i=2;i<=m;i++)
{
dp[i] = a[0];
for(int j=1;j<n;j++)
{
dp[i] += a[j] * pow(dp[i-1], j);
}
}

printf("Case #%d: %.7lf\n",++t, pow(dp[m], K));
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: