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 0xffffff7
22 #define maxn 310
23 typedef unsigned long long ull;
24 /*
25 每只毛球族都只产生自己的后代,所以可以独立计算,f[i]表示1只毛球族i天后死亡的概率,最后的结果就是f(m)^k
26 对于每只毛球族后代又可以独立计算,所以
27     f[i]=p[0]+p[1]*f[i-1]+p[2]*f[i-1]^2+...+p[n-1]*f[i-1]^n-1
28     就是说一只毛球族,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 }
时间: 2024-10-12 16:26:16

UVA 11021 - Tribles(概率)的相关文章

UVA 11021 - Tribles(概率递推)

UVA 11021 - Tribles 题目链接 题意:k个毛球,每个毛球死后会产生i个毛球的概率为pi,问m天后,所有毛球都死亡的概率 思路:f[i]为一个毛球第i天死亡的概率,那么 f(i)=p0+p1f(i?1)+p2f(i?1)2+...+pnf(i?1)n 然后k个毛球利用乘法定理,答案为f(m)k 代码: #include <stdio.h> #include <string.h> #include <math.h> const int N = 1005;

UVA 11021 Tribles(递推+概率)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33059 [思路] 递推+概率. 设f[i]表示一只Tribble经过i天之后死绝的概率,则有递推式: f[i]=p[0]+p[1]*(f[i-1]^1)+…p[n-1]*(f[i-1]^n-1) 最后答案为f[m]^k [代码] 1 #include<cstdio> 2 #include<cstring> 3 #define FOR(a,b,c) f

UVA - 11021 - Tribles 递推概率

GRAVITATION, n.“The tendency of all bodies to approach one another with a strengthproportion to the quantity of matter they contain – the quantity ofmatter they contain being ascertained by the strength of their tendencyto approach one another. This

UVA - 11021 Tribles (递推+概率)

Description Problem A Tribbles Input: Standard Input Output: Standard Output GRAVITATION, n. "The tendency of all bodies to approach one another with a strength proportion to the quantity of matter they contain -- the quantity of matter they contain

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的含义是这个毛球

uva 11021 Tribles

https://vjudge.net/problem/UVA-11021 k只麻球,每只活一天就死亡,临死之前可能会生成0——n-1只麻球 给出 生成i只麻球的概率p, 问m天后所有麻球都死亡的概率 令dp[i]表示1只麻球产生的后代在前i天死亡的概率 定义 pj * dp[i-1]^j 表示1只麻球产生了j个后代,他们全在前i-1天死亡 dp[i]= Σ  p j*dp[i-1]^j ans=dp[m]^k #include<cmath> #include<cstdio> #de

UVA 10288 - Coupons(概率递推)

UVA 10288 - Coupons 题目链接 题意:n个张票,每张票取到概率等价,问连续取一定次数后,拥有所有的票的期望 思路:递推,f[i]表示还差i张票的时候期望,那么递推式为 f(i)=f(i)?(n?i)/n+f(i?1)?i/n+1 化简后递推即可,输出要输出分数比较麻烦 代码: #include <cstdio> #include <cstring> #include <cmath> long long gcd(long long a, long lon

UVA 11291 - Smeech(概率+词法分析)

UVA 11291 - Smeech 题目链接 题意:给定一个表达式形如e=(p,e1,e2) 该表达式的值为 p?(e1+e2)+(1?p)?(e1?e2),求出值 思路:题目是很水,但是处理起来还挺麻烦的,模拟写编译器LEX分析器原理去写了. 代码: #include <cstdio> #include <cstring> const int N = 100005; char str[N]; int now, len, token; double value; void get

UVA 11346 - Probability(概率)

UVA 11346 - Probability 题目链接 题意:给定a,b,s要求在[-a,a]选定x,在[-b,b]选定y,使得(0, 0)和(x, y)组成的矩形面积大于s,求概率 思路:这样其实就是求xy > s的概率,那么画出图形,只要求y = s / x的原函数, y = slnx,带入两点相减就能求出面积,面积比去总面积就是概率 代码: #include <cstdio> #include <cstring> #include <cmath> int