题目大意

  有\(n\)种不同的邮票,皮皮想收集所有种类的邮票。唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是\(n\)种邮票中的哪一种是等概率的,概率均为\(\frac{1}{n}\)。但是由于凡凡也很喜欢邮票,所以皮皮购买第\(k\)张邮票(注意是第\(k\)张而不是第\(k\)种)需要支付\(k\)元钱。现在皮皮手中没有邮票,皮皮想知道自己得到所有种类的邮票需要花费的钱数目的期望。

  \(n\leq 10000\)

题外话

  如果买第\(k\)种需要\(k\)元钱要怎么做?

  已经买了\(i\)张,买到下一张需要的期望钱数是\(\frac{n}{n-i}\times\frac{n+1}{2}\)

  所以总的代价是

\[\sum_{i=0}^{n-1}\frac{n(n+1)}{2(n-i)}=\frac{n(n+1)}{2}\sum_{i=1}^{n}\frac{1}{i}
\]

  可惜这题没那么简单。

题解

  设\(p(x,i)\)为已经买了\(i\)个物品,通过\(x\)次购买买完剩下的物品的概率

  设\(g_i\)为已经买到了\(i\)个物品,买完所有物品的期望次数

\[g_i=g_{i+1}+\frac{n}{n-i}
\]

  下一次买到想要的物品的概率为\(\frac{n-i}{n}\),取倒数就是期望

  还有一条式子

\[g_i=\sum_{x=1}^\infty x\times p(x,i)
\]

  买\(x\)次成功的概率乘以\(x\)

  设\(f_{i,j}\)为已经买到了\(i\)个物品,之间买过\(j\)次,买完所有物品的花费

  有一个递推式

\[f_{i,j}=f_{i,j+1}\times\frac{i}{n}+f_{i+1,j+1}\times\frac{n-i}{n}+(j+1)
\]

\[\begin{align}
f_{i,j}&=\sum_{x=1}^\infty ((j+1)+(j+2)+\cdots(j+x))\times p(x,i)\\
&=\sum_{x=1}^\infty \frac{x(x+2j+1)}{2}\times p(x,i)
\end{align}
\]

  作差得

\[f_{i,j+1}-f_{i,j}=\sum_{x=1}^\infty x\times p(x,i)=g_i\\
f_{i,j+1}=f_{i,j}+g_i\\
\]

  代入到递推式中得

\[\begin{align}
f_{i,j}&=(f_{i,j}+g_i)\times\frac{i}{n}+(f_{i+1,j}+g_{i+1})\times\frac{n-i}{n}+(j+1)\\
f_{i,j}&=\frac{i}{n}f_{i,j}+\frac{i}{n}g_{i}+\frac{n-i}{n}f_{i+1,j}+\frac{n-i}{n}g_{i+1}+(j+1)\\
f_{i,j}&=\frac{i}{n-i}g_{i}+f_{i+1,j}+g_{i+1}+\frac{n}{n-i}(j+1)
\end{align}
\]

  可以发现\(f_{i,j}\)只和\(j\),\(f_{i+1,j}\),\(g_{i}\),\(g_{i+1}\)有关。因为我们只要求\(f_{0,0}\),所以可以把\(j\)那一维删去

\[f_{i}=\frac{i}{n-i}g_i+f_{i+1}+g_{i+1}+\frac{n}{n-i}
\]

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
double g[100010];
double f[100010];
int main()
{
int n;
scanf("%d",&n);
int i;
g[n]=0;
for(i=n-1;i>=0;i--)
g[i]=g[i+1]+double(n)/(n-i);
f[n]=0;
for(i=n-1;i>=0;i--)
f[i]=f[i+1]+double(i)/(n-i)*g[i]+g[i+1]+double(n)/(n-i);
printf("%.2lf\n",f[0]);
return 0;
}

【BZOJ1426】收集邮票 期望DP的更多相关文章

  1. 【BZOJ】1426: 收集邮票 期望DP

    [题意]有n种不同的邮票,第i次可以花i元等概率购买到一种邮票,求集齐n种邮票的期望代价.n<=10^4. [算法]期望DP [题解]首先设g[i]表示已拥有i张邮票集齐的期望购买次数,根据全期 ...

  2. 收集邮票 (概率dp)

    收集邮票 (概率dp) 题目描述 有 \(n\) 种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是 \(n\) 种邮票中的哪一种是等概率 ...

  3. 2018.08.31 bzoj1426 收集邮票(期望dp)

    描述 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡也很喜欢邮票,所以 ...

  4. 【BZOJ1426】收集邮票 期望

    [BZOJ1426]收集邮票 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是n种邮票中的哪一种是等概率的, ...

  5. bzoj1426: 收集邮票(期望)

    推错半天式子T T 设f[i]为买了i种卡,期望再买几张有n种卡 设g[i]为买了i种卡,期望再花多少钱有n种卡 可以把当前买卡的价格看作1,则以后买的所有卡片要增加1元,于是要加上f[i]和f[i+ ...

  6. bzoj1426 (洛谷P4550) 收集邮票——期望

    题目:https://www.luogu.org/problemnew/show/P4550 推式子……:https://blog.csdn.net/pygbingshen/article/detai ...

  7. 【BZOJ1426】收集邮票 概率DP 论文题 推公式题

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  8. 嘴巴题7 BZOJ1426: 收集邮票

    Time Limit: 1 Sec Memory Limit: 162 MB Submit: 546 Solved: 455 [Submit][Status][Discuss] Description ...

  9. Bzoj1426 收集邮票

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 292  Solved: 232 Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一 ...

随机推荐

  1. Podfile语法参考(译)

    https://www.jianshu.com/p/8af475c4f717 2015.10.30 19:14* 字数 2496 阅读 35976评论 9喜欢 120 本文翻译自官方的Podfile ...

  2. Linux 环境变量梳理

    Linux中的环境变量有两种:全局变量和局部变量: 定义.访问.删除局部变量 查看全局变量 可以使用printenv或者env命令来打印所有的全局变量. 访问某一项全局变量,可以使用printenv ...

  3. 文件操作mode学习总结-----Python学习总结【第四篇】:Python之文件操作(文件、正则、json、pickle)

    非常全的博客,防丢链接参考https://www.cnblogs.com/madsnotes/articles/5521551.html 1.文件操作 1.1 操作流程 1)文件打开 2)文件操作 3 ...

  4. java内部类 和外部类的区别

    java 内部类和静态内部类的区别  详细连接https://www.cnblogs.com/aademeng/articles/6192954.html 下面说一说内部类(Inner Class)和 ...

  5. 详解 RestTemplate 操作

    转载自:https://blog.csdn.net/itguangit/article/details/78825505 作为开发人员,我们经常关注于构建伟大的软件来解决业务问题.数据只是软件完成工作 ...

  6. Mysql优化单表查询

    借助explain分析SQL,判断该怎么建立索引. 还需要注意,有些情况会导致索引失效,用不上索引,应该优化SQL,应用上索引. 什么情况导致索引失效? 1.在索引列上做任何操作(计算.函数.类型转换 ...

  7. java.lang.Comparable 接口 详解

    参考https://blog.csdn.net/itm_hadf/article/details/7432782 http://www.blogjava.net/jjshcc/archive/2011 ...

  8. dede:field name=’position’标签调用 主页改成英文Home和改变符号

    在用dede:field name=’position’ 这个标签的时候我们调用的这个就是中文的,出现的是主页>+相应的栏目  ,那么这个问题怎么改成英文的呢?有好多大虾都说找到dede安装目录 ...

  9. Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项

    貌似已经半年多没写一篇帖子了,充分的说明要么老总一天折腾的让人心齐疲惫,没心情去写:要么另外一种可能就是自己不思进取,说白了就是懒.好在这种状态在今天被打破了.MoNey加油. 众所周知,想在Enti ...

  10. html5 autoplay不起作用 Uncaught (in promise) DOMException: play() failed because the user didn't interac

    chrome://flags/#autoplay-policy