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
  • 相关阅读:
    input输入框的各种样式
    Spring JdbcTemplate方法详解
    TF/IDF计算方法
    分布式日志收集系统--Chukwa
    分布式日志系统
    Iframe知识点
    拖拽事件
    面向对象知识点
    JS使用合并数组
    块元素block,内联元素inline; inline-block;
  • 原文地址:https://www.cnblogs.com/onioncyc/p/6512045.html
Copyright © 2011-2022 走看看