這題當m=n=0的時候要輸出1.000 剛寫的時候預設從第二次開始取了.
詳見**:
#include #include#include
#include
#include
using
namespace
std;
/*題意:從乙個擁有無限多的盒子中拿出不同顏色的糖果,拿出任何一種顏色的概率都是1/c
每次拿出來的糖果都放在桌子上,如果有相同顏色的糖果,就把這兩顆糖果吃掉.問
拿了n次後,桌子上面剩餘的糖果數量為m的概率是多大
解法:設狀態dp[i][j]為選i次後剩餘j顆糖果的概率為多大,省略了一維糖果的顏色數,因此
每次需要重新計算這個dp值,有如下dp方程:
dp[i][j] = dp[i-1][j-1] * (c-j+1)/c + dp[i-1][j+1] * (j+1)/c
含義就是從上一次後拿到了一顆不同顏色的糖果,桌子上增加了一顆糖果而來
或者是拿到了一顆相同顏色的糖果,桌子上減少了一顆糖果而來
通過牛人的測試,當n大於1000的時候,為偶數就當做1000處理,為奇數的時候就當做
1001處理,因為n很大之後,僅僅靠小數點的後三位已經反映不去其差別
*/int
c, m, n;
double dp[2][1005][105
]; void
dp()
}} int
main()
if ((n&1)^(m&1) || m > c || m >n)
if (n > 1000
) dp();
printf(
"%.3lf\n
", dp[n&1
][n][m]);
}return
0;
}
POJ 1322Chocolate 簡單概率dp
有c種顏色的糖果,你每次可以取乙個糖果放在桌子上,但是一旦桌子上已經有這個顏色的糖果了,那這兩顆糖果都會沒掉,問讓你取n次糖果最後桌子上剩下m個糖果的概率是多少。每種糖果要麼是奇數,要麼沒有 定義f i j f i j f i j 為ii i次後剩下j jj個糖果的概率 f i j f i 1 j ...
poj1322 Chocolate 生成函式
一共有 c 種糖果,取 n 次,每次取到糖果種類都是等概率的,求有 m 種糖果個數為奇數個的概率。直接概率dp時間複雜度太高,卡常數也不太好卡。將每次取出來的糖果看成是乙個帶有重複元素的排列,直接計算復合條件的排列數量。考慮符合條件的最後的序列的考慮egf 指數型生成函式 可得出現次數為偶數次的糖果...
POJ 1088 滑雪 動規
滑雪 time limit 1000ms memory limit 65536k total submissions 75664 accepted 28044 description michael喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...