zoukankan      html  css  js  c++  java
  • 【BZOJ】1426: 收集邮票 期望DP

    【题意】有n种不同的邮票,第i次可以花i元等概率购买到一种邮票,求集齐n种邮票的期望代价。n<=10^4。

    【算法】期望DP

    【题解】首先设g[i]表示已拥有i张邮票集齐的期望购买次数,根据全期望公式,可以依赖于买到已集和未集邮票的情况:

    $$g[i]=frac{i}{n}*g[i]+frac{n-i}{n}*g[i+1]+1$$

    当然最后记得+1,然后移项解方程。

    设f[i]表示已拥有i张邮票及其的期望代价,会发现因为是倒推,所以代价的问题变得很麻烦。

    我们将代价倒置,假设购买k次,那么第一张k元……第k张1元,那么就会发现代价变成了集齐的期望购买次数。

    根据全期望公式:

    $$f[i]=frac{i}{n}*(f[i]+g[i])+frac{n-i}{n}*(f[i+1]+g[i+1])+1$$

    然后移项解方程即可。

    复杂度O(n)。

    也可以直观地设计状态(不倒置代价),然后计算无穷:DaD3zZ

    #include<cstdio>
    double f[10010],g[10010],n;
    int main()
    {
        scanf("%lf",&n); 
        for(int i=n-1;i>=0;i--)f[i]=f[i+1]+n/(n-i);
        for(int i=n-1;i>=0;i--)g[i]=g[i+1]+f[i+1]+i*f[i]/(n-i)+n/(n-i);
        printf("%.2lf",g[0]);
        return 0;
    }
    View Code
  • 相关阅读:
    SQLSERVER服务器配置
    JS中的call()和apply()方法 青青
    JS || && 青青
    map() 和 forEach() 区别 兼容写法 青青
    ECMAScript arguments 对象 青青
    jsonp 青青
    Tomcat工作原理
    C博客作业02循环结构
    c语言第0次作业
    C语言博客作业03函数
  • 原文地址:https://www.cnblogs.com/onioncyc/p/6512045.html
Copyright © 2011-2022 走看看