【期望/概率論】收集郵票 洛谷P4550
阿新 • • 發佈:2020-08-18
題目描述
有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 }