https://vjudge.net/problem/UVA-11021
题意:
有k只麻球,每只活一天就会死亡,临死之前可能会生出一些新的麻球。具体来说,生i个麻球的概率为Pi。给定m,求m天后所有麻球均死亡的概率。
思路:
每只麻球都是独立存活的,也就是说如果一开始如果有两只麻球,我们只需要求出一只麻球的情况就可以了,因为另外一只麻球的情况和这一只是一样的。设f(m)表示初始1只麻球,到第m天全部死亡的概率。
根据全概率公式:
f的上标代表的是生了几只麻球,因为每只麻球的死亡是独立的,所以把它们乘起来即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std; const int maxn=+; int n,k,m;
double p[maxn];
double f[maxn]; int main()
{
//freopen("D:\\input.txt","r",stdin);
int T;
int kase=;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<n;i++)
scanf("%lf",&p[i]);
f[]=;
f[]=p[]; //一只麻球1天后全死完的概率就是生了0只麻球,这个概率也就是p[0]
for(int i=;i<=m;i++)
{
f[i]=;
for(int j=;j<n;j++)
f[i]+=p[j]*pow(f[i-],j);
}
printf("Case #%d: %.7lf\n",++kase,pow(f[m],k));
}
return ;
}