题意:给你K个毛球,每个毛球只能生存一天,但是每个毛球都有pi的概率繁殖i个毛球,问第 m 天后所有毛球死亡的概率。
分析:因为毛球独立,所以考虑一个最后取k次幂即可。所以dp[i]=∑pj*dp[i-1]^j (0<=j
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
double pow(double a,int b)
{
double res=1;
double base=a;
while(b)
{
if(b&1)
res*=base;
base*=base;
b>>=1;
}
return res;
}
double dp[1005];
double p[1005];
int main(void)
{
int n,k,m;
int cas=1;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&k,&m);
for(int i=0;i<n;i++)
scanf("%lf",&p[i]);
fill(dp,dp+m+1,0);
dp[0]=0;
dp[1]=p[0];
for(int i=2;i<=m;i++)
{
for(int j=0;j<n;j++)
dp[i]+=pow(dp[i-1],j)*p[j];
}
printf("Case #%d: %.7lf\n",cas++,pow(dp[m],k));
}
return 0;
}