首页 > 代码库 > UVA 11021(概率)
UVA 11021(概率)
题意:有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.
#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 ;}
UVA 11021(概率)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。