1. 程式人生 > 實用技巧 >【期望/概率論】收集郵票 洛谷P4550

【期望/概率論】收集郵票 洛谷P4550

題目描述

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

輸入

一行一個正整數n。

輸出

輸出期望要花費多少錢,保留兩位小數。

資料範圍限制

Solution:

題意非常簡單的概率學問題,關於期望的定義詳見這裡

在OI這類題一般用狀態轉移方程解決(以下來自官方題解,很顯然就不多解釋了)

然後O(N)倒序迴圈轉移即可,邊界條件fN=0,gN=0

另外還有的就是令人痛苦的double與int轉換問題,其他沒啥了

Code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 double f[10050],g[10050];
 4 int main()
 5 {
 6     int N;
 7     cin>>N;
 8     f[N]=0;
 9     g[N]=0;
10     double Na=1.0*N;
11     for(int i=N-1;i>=0;i--){
12         f[i]=f[i+1]+Na/(Na-1.0*i);
13         g[i]=f[i+1
]+g[i+1]+1.0*i/(Na-1.0*i)*f[i]+Na/(Na-1.0*i); 14 } 15 printf("%.2lf",g[0]); 16 return 0; 17 }