我觉得这种概率题很难想清楚后代之间的概率影响,后代产生后代,那么后代之后的概率应该怎么算。
/*************************************************************************
> Author: MentalOmega
> Mail: 965194745@qq.com
> Created Time:2017年9月1日
> function:学习一下求取期望的方法。
定义一个函数,f(i),第i天后一个麻球的后代全部死掉的概率,麻球之间的死亡是相互独立的,满足乘法定律
pi按照题目的要求是产生i个后代的概率。
那么f(i)=p0+p1*f(i-1)+p2*f(i-1)^2+...+pi*f(i-1)^i
************************************************************************/
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e3+10;
double f[MAXN];
double p[MAXN];
int n,k,m;
double dfs(int u)
{
if(u==1) return p[0];
if(f[u]!=-1) return f[u];
long double ans=0;
for(int i=0;i<n;i++)
{
ans+=p[i]*pow(dfs(u-1),i);
}
return f[u]=ans;
}
int main()
{
if (fopen("in.txt", "r") != NULL)
{
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
}
int t ;
cin>>t;
int icase=0;
while(t--)
{
cout<<"Case #"<<++icase<<": ";
fill(f,f+MAXN,-1);
f[0]=0;
cin>>n>>k>>m;
for(int i=0;i<n;i++)
cin>>p[i];
//printf("%.7f\n",pow(dfs(m),k));
cout<<pow(dfs(m),k)<<endl;
}
return 0;
}