洛谷 P4550 收集郵票 期望DP

2022-05-08 01:30:07 字數 1400 閱讀 5221

洛谷 p4550 收集郵票

演算法標籤:動態規劃(dp)期望dp

有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1/n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k張郵票需要支付k元錢。

現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期望。

一行,乙個數字n

n<=10000

要付出多少錢.

保留二位小數

輸入 #1

3
輸出 #1

21.25
期望dp

按照題目的描述,我們可以設乙個\(f\)和乙個\(g\)

​ \(f[i]\)表示買到第\(i\)張郵票還需要購買的期望次數

​ \(g[i]\)表示買到第\(i\)張郵票還需要期望花費的錢數。

講到這裡大概就可以發現,這道題需要逆推

對於乙個\(f[i]\),我們也可以有以下的幾種方案:

​ 會買到重複郵票的概率為\(\frac\),所以這項貢獻:\(f[i] \times \frac\)

​ 會買到不同郵票的概率為\(\frac\),所以這項貢獻:\(f[i+1] \times \frac\)

​ 買當前郵票,貢獻為:\(1\)。

所以對於乙個\(f[i]\),我們可以得出:\(f[i]=f[i] \times \frac + f[i+1] \times \frac+1\)。

化簡得出:\(f[i] = f[i + 1] + \frac \dots \ ①\)

那麼對於\(g[i]\),推導的方式大致與\(f[i]\)類似:

\(g[i] = (f[i]+g[i]+1) \times \frac+(f[i+1]+g[i+1]+1)\times\frac\)

化簡得出:\(g[i]=\frac\times f[i]+f[i+1]+g[i+1]+\frac \dots \ ②\)

至此,兩個必要的遞推式都推導完畢,接下來就是注意好double的處理,輸入和輸出,計算等等即可。

#include using namespace std;

const int n = 10010;

int n;

double f[n], g[n];

double _div(int a, int b)

int main()

printf("%.2lf", g[0]);

}

洛谷4550 收集郵票(期望DP)

為啥這道題都是道許可權題。雖然 很短,但是要想清楚還是很難。令f i 表示當前已經擁有了i種郵票,要擁有n種郵票的期望操作次數。取到已得到的郵票概率為i n frac ni 取到新的郵票的概率為n i n frac nn i 所以可以得到遞推式f i f i times in frac ni f i...

期望 概率論 收集郵票(洛谷P4550)

有n 種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡 凡那裡購買,每次只能買一張,並且買到的郵票究竟是n 種郵票中的哪一種是 等概率的,概率均為1 n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k 張 郵票需要支付k 元錢。現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類 的郵票需要...

洛谷 P4538 收集郵票

有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1 n。但是由於凡凡也很喜歡郵票,所以皮皮購買第k張郵票需要支付k元錢。現在皮皮手中沒有郵票,皮皮想知道自己得到所有種類的郵票需要花費的錢數目的期...