分析:
概率dp.first
由于每只麻球,在出生之后就可以独立生活了,
所以我们可以只计算出一开始只有一个麻球,m天后全部死亡的概率
由全概率公式得:
假设A1,A2,A3,…..An为一个完备事件组,
B是一个事件
已知P(Ai)和P(B|Ai),i=1,2,3,…..,n
则P(B)=P(B*A1)+P(B*A2)+……+P(B*An)=
P(A1)*P(B|A1)+P(A2)*P(B|A2)+…….+P(An)*P(B|An)
用求和符号写出就是:P(B)=∑P(Ai)P(B|Ai)
此公式为全概公式
我们可以得到这样一个柿子
Pi就是产生i个麻球的概率
f(i-1)表示一个麻球在i-1天之前连同ta的后代全部死掉的概率
因为每个麻球是独立繁衍的
所以产生了j个,全部死亡的概率就是f(i-1)^j
同理,由于一开始有k只麻球,且各只麻球的生存是独立的,
由乘法原理可以得到最后答案是
f(m)^k
这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=10005;
double f[N],p[N];
int n,m,t,k;
double KSM(double x,int b)
{
double ans=1;
for (int i=1;i<=b;i++)
ans*=x;
return ans;
}
int main()
{
//freopen("tribbles.in","r",stdin);
//freopen("tribbles.out","w",stdout);
scanf("%d",&t);
for (int T=1;T<=t;T++)
{
scanf("%d%d%d",&n,&k,&m);
for (int i=0;i<n;i++)
scanf("%lf",&p[i]);
f[0]=0;
f[1]=p[0];
for (int i=2;i<=m;i++)
{
f[i]=0;
for (int j=0;j<n;j++)
f[i]+=p[j]*KSM(f[i-1],j);
}
printf("Case #%d: %.7lf\n",T,KSM(f[m],k));
}
return 0;
}