其他分享
首页 > 其他分享> > 麻球繁衍

麻球繁衍

作者:互联网

这题必须纪念一下

各种渠道各种求助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