顯然如果收集了k天,ans=k*(k+1)/2=(k^2+k)/2.那麼現在要求的就是這個東西的期望。
設f[i]表示已有i張郵票,收集到n張的期望次數,g[i]表示已有i張郵票,收集到n張的次數的平方的期望。
顯然i這個點有 $\frac$ 的概率走自環,有 $\frac$ 的概率走到i+1這個點。
so $$f[i]=(\frac)\times(f[i]+1)+(\frac)\times(f[i+1]+1)$$
以前一直不懂平方的期望是怎麼求的,今天終於證了一發。$$e((x+1)^2)=\sum_^\infty p(i)*(i+1)^2$$
因為p後邊的那個式子是乙個具體的值所以可以拆開。
$$e((x+1)^2)=\sum_^\infty p(i)*(i+1)^2=\sum_^\infty p(i)*(i^2+2i+1)=\sum_^\infty p(i)*(i^2)+2\times\sum_^\infty p(i)*(i)+1=e[x^2]+2e[x]+1$$
其中倒數第二步是根據期望的線性可加性得來。
這樣x^2的期望就可以由(x-1)^2的期望推來。
所以g[i]和f[i]同理:設s[i]表示在從i點出發走了s[i]步後結束,g[i]=e(s[i]^2)。
$$g[i]=(\frac)\times e((s[i]+1)^2)+(\frac)\times e((s[i+1]+1)^2)$$
$$g[i]=(\frac)\times(g[i]+2\times f[i]+1)+(\frac)\times(g[i+1]+2*f[i+1]+1)$$
最後化簡一下遞推就行了。
1 #include2 #include3 #include4 #include5#define n 100005
6using
namespace
std;
7double
f[n],g[n];
8int
main()
918 printf("
%.2lf\n
",(g[0]+f[0])/2
);19
return0;
20 }
BZOJ 1426 收集郵票
題目 1426 收集郵票 time limit 1 sec memory limit 162 mb description 有n種不同的郵票,皮皮想收集所有種類的郵票。唯一的收集方法是到同學凡凡那裡購買,每次只能買一張,並且買到的郵票究竟是n種郵票中的哪一種是等概率的,概率均為1 n。但是由於凡凡也...
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...