BZOJ 1426 收集郵票

2021-06-21 21:28:20 字數 1544 閱讀 8955

題目:

1426: 收集郵票

time limit: 1 sec memory limit: 162 mb

description

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

input

一行,乙個數字n n<=10000

output

要付出多少錢. 保留二位小數

sample input

3sample output

21.25

思路:受noip吧主指點,終於知道遞推式怎麼來的了_(:з」∠)_

定義g[i]表示現有i張,買到n張所需要購買的期望張數

定義pr(x,i)表示買x次能從i種買到n種的概率

那麼有

且有

從此我們可以知道g[0]~g[n]的值

定義f[i][j]表示現有i張、買下一張要花j塊錢,買到n張所需購買的期望**

那麼f[i][j]有i/n的概率轉移到f[i][j+1],(n-i)/n的概率轉移到f[i+1][j+1],並且兩者的代價都是j

可以得到狀態轉移:f[i][j]=j+f[i][j+1]*i/n+f[i+1][j+1]*(n-i)/n

但是f[i][j]的j是無限的,所以這個遞推無法進行,考慮f[i][j]與f[i][j+1]的關係,有

且有

那麼有f[i][j]關於f[i+1][j]的狀態轉移:

再來看看我們的求解,我們只關心f[0][1]是多少,所以,對於j不等於1的情況我們可以忽略

那麼定義f[i]表示f[i][1],有

特別的,f[n][1]=0,所以f[n]=0

這條關於f[i]的表示式我們已知了f[n]的值與g[0]~g[n]的值,那麼我們就可以遞推出f[0][1]=f[0]的值,問題到此就可以解決了

#includedouble g[10005];

double f[10005];

int main()

return 0;

}

BZOJ 1426 收集郵票

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

bzoj 1426 收集郵票

f i 當前已擁有i種郵票,還需要買的郵票數的期望值。g i 當前已擁有i種郵票,還需要的錢的期望值。每張郵票初始都是1元錢,每買一張郵票,還沒購買的郵票每張都漲價1元。f i 1 n i n f i 1 i n f i f i f i 1 n n i g i 1 n i n g i 1 f i 1...

BZOJ1426 收集郵票

題面傳送門 令 f i 表示還剩 i 種模板沒有收集到,期望還需要買幾個模板 f i frac times f i frac times f i 1 1 解得 f i f i 1 n i 令 dp i 表示有 i 種模板沒收集到,期望需要多少錢買模板 dp i frac times dp i f i...