• BZOJ 1426: 收集邮票 数学期望 + DP


    Description

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

    Input

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

    Output

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

    题解: 

    挺神的一道期望 $DP$.

    令 $f_{i}$ 表示已经有 $i$ 种不同的邮票,还需购买的期望次数.

    令 $g_{i}$ 表示已经有 $i$ 种不同的邮票,还需花的期望钱数.

    先考虑 $f_{i}$ 怎么求.

    依据定义,不难得知 $f_{n}=0$.

    而 $f_{i}=P(没抽到新的) imes 次数 + P(抽到新的) imes 次数$.

    即 $f_{i}=frac{i}{n} imes(f_{i}+1)+frac{n-i}{n} imes(f_{i+1}+1)$.

    整理,得 $f_{i}=frac{n}{n-i}+f_{i+1}$.

    再考虑 $g_{i}$
     
    $g_{i}=(g_{i}+1+f_{i}) imesfrac{i}{n}+(g_{i+1}+1+f_{i+1}) imesfrac{n-i}{n}$.

    考虑一下具体含义:

    依据题目,抽到第 $k$ 张牌的代价为 $k$ 元.

    总代价与抽到卡牌的顺序是无关的.

    我们就可以默认当前抽到的卡牌代价是 $1$ 元,后面的卡牌依次排开.

    考虑未抽到新卡牌的情况:

    已经有 $i$ 种牌到终止局面的代价为 $f_{i}$,抽到当前卡牌的代价已被我们定义为 $1$. 代价是一个依次加 $1$ 的数列,等同于当前局面
    到达 $f_{i}$ 后,每张卡牌的代价都要比原来多 $1$.

    而根据我们定义的方程,已有 $i$ 张后,我们期望抽的次数是 $f_{i}$.

    那么,对于 $f_{i}$ 张卡片,每张的价格都加 $1$ 即可.

    对于 $g_{i+1}$ 的情况同理即可.

    $g_{i}=(g_{i}+1+f_{i}) imesfrac{i}{n}+(g_{i+1}+1+f_{i+1}) imesfrac{n-i}{n}$,整理一下即可. 
     
    #include <bits/stdc++.h>
    using namespace std; 
    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;
    } 
    

      

  • 相关阅读:
    #18.2.27 codevs1098 均分纸牌
    18.2.26 codevs3143 二叉树的序遍历
    18.2.14 codevs1501 二叉树最大宽度和高度
    18.2.14 codevs1011 数的计算
    18.2.14 【水】codevs1475 m进制转十进制
    18.2.14 【水】codevs1474 十进制转m进制
    18.2.14 【水】codevs1430 素数判定
    18.2.13 codevs1212 最大公约数
    18.2.13 codevs1012 最大公约数和最小公倍数问题
    17.12.31 链表合并
  • 原文地址:https://www.cnblogs.com/guangheli/p/10983501.html
Copyright © 2020-2023  润新知