題頭
描述一道很簡單,但神需要腦量的題有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種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張...