全概率公式
引例
先舉個例子,小張從家到公司上班總共有三條路可以直達(如下圖),但是每條路每天擁堵的可能性不太一樣,由於路的遠近不同,選擇每條路的概率如下:
\(P(L_1)=0.5,P(L_2)=0.3,P(L_3)=0.2\)
每天上述三條路不擁堵的概率分別為:
\(P(C_1)=0.2,P(C_2)=0.4,P(C_3)=0.7\)
假設遇到擁堵會遲到,那么小張從 \(\mathcal{Home}\) 到 \(\mathcal{Company}\) 不遲到的概率是多少?

其實不遲到就是對應着不擁堵,設事件C為到公司不遲到,事件為選擇第i條路,則:
全概率就是表示達到某個目的,有多種方式(或者造成某種結果,有多種原因),問達到目的的概率是多少(造成這種結果的概率是多少)
全概率公式:
設事件\(L_1, L_2 \cdots L_n\)是一個完備事件組,則對於任意一個事件\(C\),若有如下公式成立:
那么就稱這個公式為全概率公式。
麻球繁衍
題意
一個麻球只能存活一天,這天他有 \(p_i\) 的概率產生 \(i\) 個后代(\(0 \leq i < n\)) 現在你有 \(k\) 個麻球,求\(m\) 天之后全部死亡的概率(在這之前全部死完也算)。
思路
我們設事件 \(L_0, L_1\cdots L_{n-1}\) 分別為產生 \(0, 1\cdots n - 1\) 個后代, \(C\) 為全部死亡的概率,則 \(P(L_i)=p_i\) ,每一天麻球是否死亡相互獨立,即 \(C\) ~ \(B(p, n)\)
設\(f(i)\) 為 \(1\) 只麻球 \(i\) 天內死亡的概率,則 \(P(C|L_i)=f(i-1)^j\)
由全概率公式
所求答案即為 \(f(m)^k\)
Code
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
int n, k, m;
double p[1005], f[1005];
int main()
{
cin >> n >> k >> m;
for(int i = 0; i < n; i++)
cin >> p[i];
f[1] = p[0];
for(int i = 2; i <= m; i++)
for(int j = 0; j < n; j++)
f[i] += p[j] * pow(f[i - 1], j);
cout << fixed << setprecision(7) << pow(f[m], k);
return 0;
}
