题目链接: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;
}