zoukankan      html  css  js  c++  java
  • 【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;
    }
    

      

  • 相关阅读:
    2.Redis常用命令
    1.CentOS安装Redis
    PAT 1127 ZigZagging on a Tree(30分)
    单链表上的基本操作
    求一个序列中的主元素
    PAT 1018 Public Bike Management(30分)
    PAT 1013 Battle Over Cities
    《算法笔记》题目分类
    PAT 1030 Travel Plan(30分)
    CentOS 安装 NET Core SDK 
  • 原文地址:https://www.cnblogs.com/CQzhangyu/p/6197064.html
Copyright © 2011-2022 走看看