Uva 11021 Tribles

来源:互联网 发布:java命令运行jar包 编辑:程序博客网 时间:2024/06/07 06:58

f[i]表示1只麻球及他的子孙在i天后全部死亡的概率。

那么可以得到递推式: f[i]  = P0+P1*f[i-1]+P2*f[i-1]^2+……  也就是说生出j只的概率并且这j只及其子孙在i-1天后死亡的概率的乘积。

因为每只麻球的死亡时相互独立的,所以算出一只麻球的f[m]后k只麻球的死亡概率就是 f[m]^k。

#include <iostream>#include<stdio.h>#include<cstring>#include<cmath>using namespace std;double f[1100],p[1100];int main(){   int t;   int n,k,m;   scanf("%d",&t);   int cas = 1;   while(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]*pow(f[i-1],j);       }       double ans = pow(f[m],k);       printf("Case #%d: %.7lf\n",cas++,ans);   }    return 0;}


0 0
原创粉丝点击