zoukankan      html  css  js  c++  java
  • [洛谷P4550]收集邮票

    题目大意:有$n(nleqslant10^4)$个物品,第$i$次会从这$n$个物品中随机获得一个,并付出$i$的代价,问获得所有的$n$个物品的代价的期望。

    题解:令$f_i$表示现在已经获得了$i$种物品,取完所有物品还需的次数的期望。
    $$
    f_i=
    egin{cases}
    dfrac inf_i+dfrac{n-i}nf_{i+1}+1&(i<n)\
    0&(i=n)
    end{cases}\
    化简得f_i=
    egin{cases}
    f_{i+1}+dfrac n{n-i}&(i<n)\
    0&(i=n)
    end{cases}\
    $$
    令$g_i$表示已经获得了$i$种物品,取完所有物品还需的代价的期望(假设原来的物品是凭空获得,下面的物品代价从$1$开始)
    $$
    g_i=
    egin{cases}
    dfrac in(g_i+f_i+1)+dfrac{n-i}n(g_{i+1}+f_{i+1}+1)&(i<n)\
    0&(i=n)
    end{cases}\
    化简得g_i=
    egin{cases}
    dfrac i{n-i}f_i+g_{i+1}+f_{i+1}+dfrac n{n-i}&(i<n)\
    0&(i=n)
    end{cases}\
    $$
    卡点:

    C++ Code:

    #include <cstdio>
    #define maxn 100010
    int n;
    double f[maxn], g[maxn];
    int main() {
    	scanf("%d", &n);
    	for (int i = n - 1; ~i; --i) {
    		f[i] = f[i + 1] + n / static_cast<double> (n - i);
    		g[i] = i / static_cast<double> (n - i) * f[i] + g[i + 1] + f[i + 1] + n / static_cast<double> (n - i);
    	}
    	printf("%.2lf
    ", g[0]);
    	return 0;
    }
    

      

  • 相关阅读:
    02Hibernate入门
    01Hibernate概述
    ExtJS布局-Layout
    STARLIMS 安装升级解决方案
    Windows Server 2012 安装.Net Framework 3.5
    vim 复制操作
    linux下挂载新硬盘
    转载 更改mysql 数据存储路径
    转载 阿里云centOS防火墙配置
    (转载)java线程
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/10348323.html
Copyright © 2011-2022 走看看