• [洛谷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;
    }
    

      

  • 相关阅读:
    perl 获取铜板街页码
    $response->decoded_content 和$response->content
    基于Netty5.0高级案例之请求响应同步通信
    [Err] 1091
    [Err] 23000
    [Err] 42000
    perl 爬取 find_by_tag_name
    perl 爬取html findvalues 方法
    perl 安装DBI和DBD
    js setTimeout 参数传递使用介绍
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/10348323.html
Copyright © 2020-2023  润新知