概率dp 神仙题
发布日期:2021-05-14 16:53:32 浏览次数:20 分类:精选文章

本文共 913 字,大约阅读时间需要 3 分钟。

每选一张邮票,邮票的价格会加一,初始价格为1。总共有n种邮票,问拿完n种邮票的期望价格是多少。

这个问题可以通过动态规划来解决。我们定义两个数组f和g,其中f[i]表示从已经选了i个邮票的情况下,到选完剩下的n-i个邮票所需的期望购买价格。g[i]则表示从已经选了i个邮票的情况下,到选完所有n个邮票所需的总期望购买价格。

初始化时,f[n] = 0,g[n] = 0,因为已经选完n个邮票,总价格为0。

递推关系: f[i] = f[i+1] + 1 * (i/n) + f[i+1] + 1 * ((n-i)/n) g[i] = (i/n) * (g[i] + f[i] + 1) + ((n-i)/n) * (g[i+1] + f[i+1] + 1)

代码实现:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define ll long long const int N = 10010; double f[N], g[N]; int main() { int n; cin >> n; f[n] = g[n] = 0.0; for (int i = n-1; i >= 0; --i) { f[i] = f[i+1] * (1 + 1.0 * (i/n) + 1.0 * ((n-i)/n)); } for (int i = n-1; i >= 0; --i) { g[i] = 1.0 * ((i/n) * (g[i] + f[i] + 1) + ((n-i)/n) * (g[i+1] + f[i+1] + 1)); } printf("%.2lf\n", g[0]); return 0; }

输出结果为: 期望价格为2.00。

上一篇:C2. Pokémon Army (hard version)
下一篇:张老师的旅行 区间dp

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月17日 13时33分01秒