首页 > 代码库 > UVA 11021 - Tribles(概率)
UVA 11021 - Tribles(概率)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=481&page=show_problem&problem=1962
刚开始没理解题意,看了题解之后也不太理解,现在好点了。
其实可以看作每个麻球的后代是独立的,后代的后代同理也是独立的。
一只麻球有P[j]的概率生j只后代,每只后代在i-1天后死亡的的概率是f[i-1],j只麻球即有pow(f[i-1], j)的概率在i-1天后死亡,即可得代码如下
1 #include <iostream> 2 #include <sstream> 3 #include <cstdio> 4 #include <cstring> 5 #include <cmath> 6 #include <string> 7 #include <vector> 8 #include <set> 9 #include <cctype>10 #include <algorithm>11 #include <cmath>12 #include <deque>13 #include <queue>14 #include <map>15 #include <stack>16 #include <list>17 #include <iomanip>18 19 using namespace std;20 21 #define INF 0xffffff722 #define maxn 31023 typedef unsigned long long ull;24 /*25 每只毛球族都只产生自己的后代,所以可以独立计算,f[i]表示1只毛球族i天后死亡的概率,最后的结果就是f(m)^k26 对于每只毛球族后代又可以独立计算,所以27 f[i]=p[0]+p[1]*f[i-1]+p[2]*f[i-1]^2+...+p[n-1]*f[i-1]^n-128 就是说一只毛球族,i天后死亡的概率就是,它的后代i-1天都死亡的概率29 */30 int main()31 {32 int T;33 scanf("%d", &T);34 for(int kase = 1; kase <= T; kase++)35 {36 int n, k, m;37 scanf("%d%d%d", &n, &k, &m);38 double p[maxn];39 for(int i = 0; i < n; i++)40 {41 scanf("%lf", &p[i]);42 }43 double ans;44 double f[maxn];45 46 f[0] = 0;47 f[1] = p[0];/*1只麻球1天后死亡的概率为p[0],即生出0只麻球的概率*/48 for(int i = 2; i <= m; i++)49 {50 f[i] = 0;51 for(int j = 0; j < n; j++)52 f[i] += p[j]*pow(f[i-1], j);53 }54 printf("Case #%d: %.7lf\n", kase, pow(f[m], k));55 }56 return 0;57 }
UVA 11021 - Tribles(概率)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。