题目链接:Click here

Solution:

本题直接推价格似乎很难,考虑先从购买次数入手

设购买次数\(g(i)\)为当前有\(i\)种不同的邮票,要买到\(n\)种的期望购买次数

可以由期望的定义得到式子:\(g(x)=\sum_{i=0}^{+\infty}P(i,x)\),其中\(P(i,x)\)为买\(i\)次从\(x\)种买到\(n\)种的概率

对于一个局面,记它可以转移到的局面集合为\(to\),则它的期望可以表示为

\[E(u)=\sum_{v\in to_u}(E(v)+cost(v,u))P(v)
\]

其中\(P(v)\)表示从\(v\)局面转移到\(u\)局面的概率,\(cost(v,u)\)表示从\(v\)转移到\(u\)局面的的代价

那么对于本题也可以如此转化:\(g(x)=\frac{x}{n}(g(x)+1)+\frac{n-x}{n}(g(x+1)+1)\)

也很好理解,因为再抽一张卡,可能抽到已经抽到的,也可能抽到新的,而转移的代价都为1

显然,\(g(n)=0\),再把式子转化一下,就可以得到\(g(x)\)的计算方式:

\[\frac{n-x}{n}g(x)=\frac{n-x}{n}g(x+1)+1\\
g(x)=g(x+1)+\frac{n}{n-x}
\]

然后我们再考虑设\(f(i,j)\)表示当前有\(i\)种邮票,下次购买要花\(j\)元时,买到\(n\)种的期望花费

我们知道购买要\(j\)元,结合题意,就能很好的推出\(f(i,j)\)的转化方程:

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

我们考虑一下\(f(i,j)\)的定义,便可以得出式子:

\[f(i,j)=\sum_{u=0}(j+(j+1)+\dots+(j+u-1))P(u,i)\\
f(i,j)=\sum_{u=0}\frac{u(2j+u-1)}{2}P(u,i)\\
\]

这里\(P\)的定义同上文\(g(x)\)定义式中的\(P\),然后我们再考虑表示\(f(i,j+1)\),很简单,带入即可

\[f(i,j+1)=\sum_{u=0}\frac{u(2j+u+1)}{2}P(u,i)
\]

考虑表示将\(f(i,j+1)\)减去\(f(i,j)\)可得:\(f(i,j+1)-f(i,j)=\sum_{u=0}uP(u,i)\)

可以发现它与前面的期望定义式是一样的,则我们得到式子:\(f(i,j+1)=f(i,j)+g(i)\)

则我们可以把\(f(i,j)\)表示一下:

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

事实上我们只需求出\(f(0,1)\),而在递推中可以发现\(j\)是没有变化的,则可以直接忽略\(j\)

\[f(i)=\frac{i}{n}(f(i)+g(i))+\frac{n-i}{n}(f(i+1)+g(i+1))+1\\
\frac{n-i}{n}f(i)=\frac{i}{n}g(i)+\frac{n-i}{n}f(i+1)+\frac{n-i}{n}g(i+1)+1\\
f(i)=\frac{i}{n-i}g(i)+f(i+1)+g(i+1)+\frac{n}{n-i}
\]

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+1;
int n;double u,f[N],g[N];
int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int main(){
n=read();f[n]=g[n]=0;u=n;
for(int i=n-1;~i;i--) g[i]=g[i+1]+u/(u-i);
for(int i=n-1;~i;i--){
double x=i,y=n-i;
f[i]=f[i+1]+g[i+1]+x/y*g[i]+u/y;
}Pintf("%.2lf",f[0]);
return 0;
}

题外话:推的时候发现了另外一个式子:设\(P(x)\)表示用\(x\)步刚好取到所有邮票的概率,则:

\[P(x)=\frac{1}{n}\Pi_{i=0}^{n-2}\frac{n-i}{n}\Pi_{i=1}^{x-n}\frac{n-1}{n}\\
P(x)=\frac{n!(n-1)^{x-n}}{n^x}
\]

式子也很好理解,保证最后取到没取到的那种,再取完其它的种类,剩下的步数只要不取到最后那枚就行

则本题也可以这样求:

\[sum(n)=\sum_{i=1}^ni\\
E(0)=\sum_{i=n}^{+\infty}P(i)sum(i)
\]

然后对这个式子求个通项就行了,不过我还不会求。。。

Luogu P4550 收集邮票的更多相关文章

  1. P4550 收集邮票

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

  2. P4550 收集邮票-洛谷luogu

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

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

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

  4. 洛谷P4550 收集邮票(概率期望)

    传送门 神仙题啊……这思路到底是怎么来的…… ps:本题是第$k$次买邮票需要$k$元,而不是买的邮票标号为$k$时花费$k$元 我们设$g[i]$表示现在有$i$张,要买到$n$张的期望张数,设$P ...

  5. P4550 收集邮票 与 灵异的期望

    考前复习一下期望相关知识,这题的期望还是很巧妙的. 设 \(f_{i}\) 表示已经买到了 \(i\) 张不同的邮票的期望步数,\(g_{i}\) 表示表示已经买到了 \(i\) 张不同的邮票的期望花 ...

  6. [洛谷P4550]收集邮票

    题目大意:有$n(n\leqslant10^4)$个物品,第$i$次会从这$n$个物品中随机获得一个,并付出$i$的代价,问获得所有的$n$个物品的代价的期望. 题解:令$f_i$表示现在已经获得了$ ...

  7. [P4550] 收集邮票 - 概率期望,dp

    套路性地倒过来考虑,设\(f[i]\)表示拥有了\(i\)种票子时还需要多少次购买,\(g[i]\)表示还需要多少钱 推\(g[i]\)递推式时注意把代价倒过来(反正总数一定,从顺序第\(1\)张开始 ...

  8. 【BZOJ-1426】收集邮票 概率与期望DP

    1426: 收集邮票 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 261  Solved: 209[Submit][Status][Discuss] ...

  9. 【BZOJ1426】收集邮票 期望

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

随机推荐

  1. python 有参数的装饰器

    怎么样为装饰器加参数 import time current_user = {'user':None} def auth(engine = "file") def deco(fun ...

  2. MSF魔鬼训练营-3.1.2信息收集-通过搜索引擎进行信息搜集

    1.Google hacking 技术 自动化的Google搜索工具 SiteDigger https://www.mcafee.com/us/downloads/free-tools/sitedig ...

  3. [转帖]Linux下inotify监控文件夹状态,发生变化后触发rsync同步

    Linux下inotify监控文件夹状态,发生变化后触发rsync同步 https://www.cnblogs.com/fjping0606/p/6114123.html 1.安装工具--inotif ...

  4. os.path路径拓展 python3

    os.path-对路径path进行的操作 在调用os.path时, 根据操作系统的不同 程序会选择使用posixpath.py或ntpath.py(由os中的代码实现). 对文件命名时应当使用unic ...

  5. Java基础——Modifier类

    转自:https://www.cnblogs.com/baiqiantao/p/7478523.html   反射 Reflect Modifier 修饰符工具类 在查看反射相关的Class.Fiel ...

  6. ExpressionTree学习笔记

    概述: 这段时间需要制定自定义查询条件,感觉有必要学习ExpressionTree. 学习参考资料:https://msdn.microsoft.com/en-us/library/mt654263. ...

  7. wex5 如何导包

    wex5中 导jar包 要先把jar文件放在: E:\WeX5\runtime\BaasServer\WEB-INF\lib目录中(我wex5放的是E盘) 点击项目 --> 属性 --> ...

  8. CSS hack(过滤器)

    CSS hack概念: 是针对不同浏览器对同一段代码解析不同的处理方案:<解决兼容性问题> 属性设置在不同版本的IE里会出现不兼容问题,css hack解决兼容主流浏览器和IE 常见的过滤 ...

  9. JSP 自定义标签 生命周期

    1. 2.

  10. tensorflow 学习教程

    tensorflow 学习手册 tensorflow 学习手册1:https://cloud.tencent.com/developer/section/1475687 tensorflow 学习手册 ...