【BZOJ3093】A Famous Game-概率論+組合數學

測試地址:A Famous Game
題目大意: 一個袋子裏有nn個球,球的顏色只有紅和藍,紅色球的數目爲00 ~ nn的概率都是相等的。現在已經從裏面取出了pp個球,其中qq個是紅色,求下一個取出的球是紅色的概率。
做法: 本題需要用到概率論+組合數學。
通過這道題,我終於意識到概率論這個東西真的不可能靠直覺算對…想出來這種東西的貝葉斯真是個神人…
本題需要用到的公式:
P(AB)=P(AB)P(B)P(A|B)=\frac{P(AB)}{P(B)}
條件概率公式,意爲:在已經發生BB的條件下,發生AA的概率,等於A,BA,B同時發生的概率,除以BB發生的概率。至於原因,寫成這樣應該更好理解:
P(AB)=P(B)P(AB)P(AB)=P(B)P(A|B)
還有全概率公式:P(A)=kP(Nk)P(ANk)P(A)=\sum_{k}P(N_k)P(A|N_k),其中NkN_k是互斥(即不可能同時發生)的事件,且它們發生的概率之和爲11
於是令AA爲下一個取出的球是紅球這個事件,BB爲已取出的pp個球中有qq個是紅球這個事件,NkN_k爲一開始的袋子裏有kk個紅球這個事件,則要求的就是P(AB)P(A|B),那麼:
P(AB)=P(AB)P(B)P(A|B)=\frac{P(AB)}{P(B)}
=k=0nP(ABNk)P(Nk)k=0nP(BNk)P(Nk)=\frac{\sum_{k=0}^nP(AB|N_k)P(N_k)}{\sum_{k=0}^nP(B|N_k)P(N_k)}
=k=0nP(ABNk)P(BNk)P(Nk)k=0nP(BNk)P(Nk)=\frac{\sum_{k=0}^nP(A|BN_k)P(B|N_k)P(N_k)}{\sum_{k=0}^nP(B|N_k)P(N_k)}
於是有:
P(ABNk)=kqnpP(A|BN_k)=\frac{k-q}{n-p}
P(BNk)=CkqCnkpqCnqP(B|N_k)=\frac{C_k^qC_{n-k}^{p-q}}{C_n^q}
P(Nk)=1n+1P(N_k)=\frac{1}{n+1}
代入上面的式子中,約掉所有能直接約掉的東西得到:
P(AB)=k=0nCkqCnkpq(kq)k=0nCkqCnkpq(np)P(A|B)=\frac{\sum_{k=0}^nC_k^qC_{n-k}^{p-q}(k-q)}{\sum_{k=0}^nC_k^qC_{n-k}^{p-q}(n-p)}
=k=0nCkq+1Cnkpq(q+1)k=0nCkqCnkpq(np)=\frac{\sum_{k=0}^nC_k^{q+1}C_{n-k}^{p-q}(q+1)}{\sum_{k=0}^nC_k^qC_{n-k}^{p-q}(n-p)}
=q+1npk=0nCkq+1Cnkpqk=0nCkqCnkpq=\frac{q+1}{n-p}\cdot \frac{\sum_{k=0}^nC_k^{q+1}C_{n-k}^{p-q}}{\sum_{k=0}^nC_k^qC_{n-k}^{p-q}}
現在需要用到一個結論:
k=0sCknCskm=Cs+1n+m+1\sum_{k=0}^sC_k^nC_{s-k}^m=C_{s+1}^{n+m+1}
可以看做是,在s+1s+1中選擇n+m+1n+m+1個數,kk就可以看做是在枚舉第n+1n+1個數是哪一個。於是:
P(AB)=q+1npCnp+2Cnp+1P(A|B)=\frac{q+1}{n-p}\cdot \frac{C_n^{p+2}}{C_n^{p+1}}
=q+1npnpp+2=\frac{q+1}{n-p}\cdot \frac{n-p}{p+2}
=q+1p+2=\frac{q+1}{p+2}
於是答案就出來了,一行代碼解決。
以下是本人代碼:

#include <bits/stdc++.h>
using namespace std;
double n,p,q;

int main()
{
	int t=0;
	while(scanf("%lf%lf%lf",&n,&p,&q)!=EOF)
	{
		++t;
		printf("Case %d: %.4lf\n",t,(q+1.0)/(p+2.0));
	}
	
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章