1. 程式人生 > >牛客練習賽26 B.煙花(概率DP)

牛客練習賽26 B.煙花(概率DP)

題目描述 

小a有個煙花,每個煙花代表著互不相同的顏色,對於第個煙花,它有的概率點燃,現在小a要去點燃它們,他想知道產生顏色的期望個數 及 產生恰好產生種顏色的概率

輸入描述:

第一行兩個整數
接下來一行個數,第個數表示第個煙花被點燃的概率

輸出描述:

輸出有兩行
第一行表示產生不同顏色的期望個數

第二行表示產生恰好種顏色的概率

以換行符分割

示例1

輸入

複製

3 2
0.5 0.25 0.75

輸出

複製

1.5000
0.4062

說明

第二問樣例解釋:

相加得

備註:

對於的資料:
對於的資料:
輸出均保留4位小數,若你的答案誤差與std不超過即為正確

思路:概率DP。

我們先看下面這個表格,是n為3,k為2的情況。

i\dp\j 0 1 2
0 1 0 0
1 1−p11−p1 p1p1 0
2 (1−p1)∗(1−p2)(1−p1)∗(1−p2) (1−p1)∗p2+p1∗(1−p2)(1−p1)∗p2+p1∗(1−p2) p1∗p2p1∗p2
3 (1−p1)∗(1−p2)∗(1−p3)(1−p1)∗(1−p2)∗(1−p3) (1−p1)∗(1−p2)∗p3+(1−p1)∗p2∗(1−p3)+p1∗(1−p2)∗p3(1−p1)∗(1−p2)∗p3+(1−p1)∗p2∗(1−p3)+p1∗(1−p2)∗p3 (1−p1)∗p2∗p3+p1∗(1−p2)∗p3+p1∗p2∗(1−p3)(1−p1)∗p2∗p3+p1∗(1−p2)∗p3+p1∗p2∗(1−p3)

可以看出來對於前i個煙花,恰好有j個燃放的概率只與前i-1個煙花,恰好有j個或j-1個燃放的概率有關。

設DP[i][j]表示前i個煙花恰好爆炸了j個的概率,可得DP方程: 

{DP[i][j]=DP[i−1][j]∗(1−pi)+DP[i−1][j−1]∗piDP[0][0]=1{DP[i][j]=DP[i−1][j]∗(1−pi)+DP[i−1][j−1]∗piDP[0][0]=1

AC程式碼: