码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 11021(概率)

时间:2014-10-03 22:19:45      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   sp   

题意:有k个毛球,每只活一天就会死亡,临死之前可能会生出一些新的毛球。具体来说,生i个毛球的概率为Pi。给定m,求m天所有毛球均死亡的概率。 注意,不足m天时就已全部死亡的情况也算在内。

题解:由于每只毛球的后代独立存活,只需求出一开始只有1只毛球,m天后全部死亡的概率f(m)。由全概率公式,有

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

    其中Pj*f(i-1)^j的含义是这个毛球生了j个后代, 它们在i-1天后全部死亡。注意着j个后代的死亡时独立的,而每个死亡的概率都是f(i-1),根据乘法公式,j个后代全部死亡的概率为f(i-1)^j.同类,由于一开始共有k只毛球,且各只毛球的死亡时独立的,由乘法公式,最终答案是f(m)^k.

bubuko.com,布布扣
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;

double f[1005],p[1005];

int main()
{
    int t,n,m,k,C = 1;
    cin >> t;

    while(t --)
    {
        cin >> n >> k >> m;

        for(int i = 0;i < n; i++)
            cin >> 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 x = pow(f[m],k);
        printf("Case #%d: %.7lf\n",C++,x);
    }
    return 0 ;
}
View Code

 

UVA 11021(概率)

标签:style   blog   http   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/zsj-93/p/4005288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!