BZOJ1426 收集郵票(期望dp)

2022-08-12 22:51:24 字數 2136 閱讀 5143

題頭

描述

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

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

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

樣例輸入

3 樣例輸出

21.25

一道很簡單,但神需要腦量的題

本來想設陣列dp [ i ]表示已經買了i種郵票的期望次數,推出了公式

如果已經有k種郵票,則多出一種的期望次數為k/

(n−k

)' role="presentation" style="text-align: center; position: relative">k/(

n−k)

k/(n

−k)於是得到dp的遞推式dp

[i]=

dp[i

+1]+

n/(n

−i)' role="presentation" style="text-align: center; position: relative">dp[

i]=d

p[i+

1]+n

/(n−

i)dp

[i]=

dp[i

+1]+

n/(n

−i)但忽略了期望次數並不帶表**就是期望次數的等差數列,期望次數只是乙個趨近無限時,平均次數趨近的乙個值,而且次數為無限時,平均次數的值,和**可以說沒有直接關聯

設g[i]表示已買了i中期望需要的錢則g

[i]=

(g[i

]+dp

[i]+

1)∗i

/n(沒

有買到新

種類郵票

)+(g

[i+1

]+dp

[i+1

]+1)

∗(n−

i)/i

(買到新

種類郵票

)' role="presentation" style="position: relative">g[i

]=(g

[i]+

dp[i

]+1)

∗i/n

(沒有買

到新種類

郵票)+

(g[i

+1]+

dp[i

+1]+

1)∗(

n−i)

/i(買

到新種類

郵票)g

[i]=

(g[i

]+dp

[i]+

1)∗i

/n(沒

有買到新

種類郵票

)+(g

[i+1

]+dp

[i+1

]+1)

∗(n−

i)/i

(買到新

種類郵票

)化簡就是g[

i]=g

[i+1

]+dp

[i]∗

n/(n

−i)' role="presentation" style="text-align: center; position: relative">g[i

]=g[

i+1]

+dp[

i]∗n

/(n−

i)g[

i]=g

[i+1

]+dp

[i]∗

n/(n

−i)答案就是g[

0]' role="presentation" style="text-align: center; position: relative">g[0

]g[0

]**

#include

using

namespace

std;

double dp[10005],g[10005];int n;

int main()

神tm短,10行都沒有,但是思路和公式很難想

BZOJ1426 收集郵票 期望

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

BZOJ 1426 收集郵票 期望DP

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

bzoj 1426 收集郵票 期望dp

1426 收集郵票 time limit 1 sec memory limit 162 mb submit 392 solved 319 submit status discuss description 有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張...