POJ 1322 Chocolate 動態規劃

2021-09-06 07:46:10 字數 946 閱讀 7898

這題當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喜歡滑雪百這並不奇怪,因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你...