UVa 11021 - Tribles

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;

}

 

你可能感兴趣的:(uva)