麻球繁衍
作者:互联网
这题必须纪念一下
各种渠道各种求助dalao,弄了几个小时才明白的
样例1输入
3 1 1
0.33
0.34
0.33
样例1输出
0.3300000
样例2输入
3 1 2
0.33
0.34
0.33
样例2输出
0.4781370
先说明:
然后
全概率公式
好了,全概率公式就补充这些
下面是该题的做法
读题知:
今天的肯定都是昨天新生的,今天这些也肯定到不了明天,今天就死掉了,
明天的是今天的某些生的,生不生概率是一定的,且每个生的个数是一定的
今天死光了说明前一天死完了,所以可用前一天死亡的概率就可以来递推今天全部死亡的概率
询问的是m天内所有生物都死的概率(包括m天前死亡的情况)
每个麻球都是独立的,而且会在当天死亡, 每个麻球和它的后代死亡的概率也是独立的
因为麻球的各种活动都互不影响,所以现在只考虑一只麻球
再来一遍全概率公式,展开一下: P(A)=P(B1)*P(A|B1)+P(B2)*P(A|B2)…P(Bn)*P(A|Bn)
因为这j个后代的死亡是独立的,而每个死亡的概率都是f(i-1)(今天死光了说明前一天死完了,所以可用前一天死亡的概率就可以来递推今天全部死亡的概率),
因此根据乘法公式,j个后代全部死亡的概率为f(i-1)^j 。
同理,由于一开始共有k只麻球,且各只麻球的死亡是独立的,由乘法公式,最终答案是f(m)^k
//每只麻球是独立的,k只的答案是一只的k次方。 //同样,生出的每只麻球也是独立的,单独考虑即可。 #include<bits/stdc++.h> #define N 1000 + 10 using namespace std; int n, k, m; double p[N], f[N]; int main() { 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); } printf("%.7lf\n", pow(f[m], k)); return 0; }
标签:概率,int,繁衍,样例,麻球,死亡,0.33 来源: https://www.cnblogs.com/aprincess/p/11814223.html