BZOJ1426收集邮票 期望

Posted CQzhangyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1426收集邮票 期望相关的知识,希望对你有一定的参考价值。

【BZOJ1426】收集邮票

Description

有n种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n。但是由于凡凡也很喜欢邮票,所以皮皮购买第k张邮票需要支付k元钱。 现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。

Input

一行,一个数字N N<=10000

Output

要付出多少钱. 保留二位小数

Sample Input

3

Sample Output

21.25
题解:设s[i]表示已经有了i种邮票还需要的邮票数,f[i]表示还需要的钱数。
那么我们倒着推,每次买一个邮票的状态转移为:
s[i]=s[i+1]*(n-i)/n+s[i]*i/n+1
移项,得
s[i]=s[i+1]+n/(n-i)
又有
f[i]=(f[i+1]+s[i+1]+1)*(n-i)/n+(f[i]+s[i]+1)*i/n
移项
f[i]=f[i+1]+s[i+1]+s[i]*i/(n-i)+n/(n-i)
我当时凝思了半天才想明白答案不是s[0]*(s[0]+1)/2 ~~~
#include <cstdio>
double n,f[10010],s[10010];
int main()
{
    scanf("%lf",&n);
    for(int i=n-1;i>=0;i--)
    {
        s[i]=s[i+1]+n/(n-i);
        f[i]=f[i+1]+s[i+1]+s[i]*i/(n-i)+n/(n-i);
    }
    printf("%.2f",f[0]);
    return 0;
}

 

以上是关于BZOJ1426收集邮票 期望的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1426--收集邮票(概率与期望&DP)

BZOJ1426: 收集邮票 期望DP

bzoj 1426:收集邮票 求平方的期望

bzoj 1426: 收集邮票期望dp

bzoj1426 收集邮票

[bzoj1426]收集邮票