UVa 11021 - Tribles

时间:2021-07-21 06:16:23

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1962

f(i) 表示 在有一只tribble 经过i天后全死掉的 概率

然后枚举tribble第一天生了多少个后代 所以:

f(i) = P0*(f(i-1)^0)+P1*(f(i-1)^1)+P2*(f(i-1)^2)+.......+Pn-1*(f(i-1)^n-1)

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<algorithm>
#include<queue> #define ull unsigned long long
#define ll long long
#define lint long long
using namespace std; const int INF=0x3f3f3f3f;
const int N=1003;
double p[N],f[N];
int main()
{
//freopen("data.in","r",stdin);
int T;
scanf("%d",&T);
for(int c=1;c<=T;++c)
{
printf("Case #%d: ",c);
int n,k,m;
scanf("%d %d %d",&n,&k,&m);
for(int i=0;i<n;++i)
scanf("%lf",&p[i]);
for(int i=0;i<=m;++i)
f[i]=0;
for(int i=1;i<=m;++i)
{
for(int j=0;j<n;++j)
f[i]+=(p[j]*pow(f[i-1],j));
}
printf("%.7lf\n",pow(f[m],k));
}
return 0;
}