考前复习一下期望相关知识,这题的期望还是很巧妙的。

设 \(f_{i}\) 表示已经买到了 \(i\) 张不同的邮票的期望步数,\(g_{i}\) 表示表示已经买到了 \(i\) 张不同的邮票的期望花费;\(h_{i}\) 表示已经买到了 \(i\) 张不同的邮票、想买下剩下邮票的期望步数,\(y_{i}\) 表示表示已经买到了 \(i\) 张不同的邮票、想买下剩下邮票的期望花费。

1. 分析性质直接推

我们可以得到一些好玩的式子们,有一些是对的,有一些是错的:

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

这个式子是对的,为什么呢?我抽到新邮票的概率是 \(\frac{n-i+1}{n}\),那么抽到新邮票的期望次数就是 \(\frac{n}{n-i+1}\)。上述式子甚至可以写成 $ f_n = \sum\limits { \frac{1}{i} } $。

\[g_n = \frac{f_n(f_n+1)}{2}
\]

这个式子显然是错的。为什么呢?有两种解释方法,一是每种 \(f_n\) 的取值的贡献不是一样的,不满足线性性;也可以看做是 \(\mathbb{E}(x^2)\) 作为不独立的两个变量相乘,不具有线性性。

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

这个式子又是对的了,(我也不知道为什么它是对的,目前 lzy 大佬正在证明它)。这个成立就能得到一些很好玩的式子,比如 $ f_{n} = \sum\limits_{i=1}^{n}(\frac{n}{i} \sum\limits_{j=1}^{i}(\frac{n}{i})) $。

2. 用无穷级数直接表示最终答案

众所周知 \(\mathbb{E}(x) = \sum\limits x_iP_i\),于是我们可以直接表示出最终的答案:

\[f_n = \sum_{i=1}^{+\infty} \frac{i+i^2}{2} \times \frac{\tbinom{n-1}{i-2}}{n^i}
\]

其中 \(\frac{i+i^2}{2}\) 是贡献,右边的是概率;概率等于合法情况数除以总情况数,会发现合法情况数就是一个不定方程正整数解的个数的形式,总情况数简单,于是就有了上述式子。

但是这个式子其实没有什么用,一个是精度无法接受,一个是要计算到极高的项才能保证精度,\(n=10^4\) 时大概在 \(4 \times 10^8\) 这样。

更误:这个东西似乎不能等价于不定方程,因为 \(n\) 个物品是两两不同的,所以应该用第二类斯特林数乘以 \((n-1)!\) (乘以阶乘是因为集合也有序),得到

\[f_n = \sum_{i=1}^{+\infty} \frac{i+i^2}{2} \times \frac{S(i-1,n-1)\times n!}{n^i}
\]

3. 方程法解决递归型期望

\[h_i = \frac{i}{n}(h_i + 1) + \frac{n-i}{n}(h_{i+1} + 1)
\]

这个来源于分类讨论,两种情况分别讨论一下,移项一下就能得到递推式。

\[y_i = \frac{i}{n}(h_i+y_i+1) + \frac{n-i}{n}(h_{i+1}+y_i+1)
\]

和上面的方程的来源是一样的,但是需要用到费用提前计算——\(h_i+1\) 的含义是替后面的提前加上。但这个式子还是有一些难以解释通的地方,为什么递归下去后每次提前计算的贡献是相同的?那不是成了平行四边形吗?这个方法使得期望满足了线性性——竖着我统计没有线性性,横过来看就能巧妙地去掉乘积项,就拥有了线性性。

更为不严谨的方程: 设买了 \(x\) 次邮票,答案就是 \(\frac{x+x^2}{2}\)。设 \(w_i\) 表示已经买到了 \(i\) 种邮票、要买剩下的的邮票的次数平方的期望(注意和期望的平方的区别),那么可以得到

\[w_i = \frac{i}{n}(w_i + 2h_i + 1) + \frac{n-i}{n}(w_{i+1} + 2h_{i+1} + 1)
\]

于是答案就是 \(\frac{h_0 + w_0}{2}\)。但是——这么做是有问题的——因为默认了平方的期望等于期望的平方!但是,他居然能过!错的做法能过,说明过的做法都是错的,细思极恐啊!

4. 一个极尽严谨的方法

注意到上面所有东西不严谨的地方在于在变量不独立的情况下使用了乘积的期望等于期望的乘积,可能只是这题它恰好是对的,但不见得下一回它会对。那我们就把乘法的步骤替换成无穷级数求和就行了。

考虑我要买到第 \(i\) 种邮票,若这次我花了 \(1\) 步,那期望的花费是 \(f_{i-1} + 1\);如果花了 \(i\) 步,期望花费是 \(f_{i-1} + 1 + f_{i-1} + 2\) 元......(期望在加法上满足线性性,不管它独不独立。),\(k\) 步的期望花费是 \(kf_{i-1} + \frac{k+k^2}{2}\)(这个地方可以运用乘法是因为这个是取值的乘积,而不是期望的乘积),走 \(k\) 步的概率是 \((\frac{i-1}{n})^{k-1} \times \frac{n-i+1}{n}\),于是得到贡献函数 \(d(i)=g(i)-g(i-1)\) 满足

\[d(i) = \sum_{k=1}^{+\infty} (kf_{i-1} + \frac{k+k^2}{2}) \times (\frac{i-1}{n})^{k-1} \times \frac{n-i}{n}
\]

我相信它化简出来的结果恰好等于 \(\frac{n}{n-i+1}f_{i}\),但是这里篇幅有限,留给读者,证明又繁又难,读者自证又烦又南。

关于随机数

const int maxn =  1e5 + 1e2;

bool vis[maxn]; int n = 31;

unsigned int sd = 233;

inline unsigned int rd()
{
return sd ^= sd >> 13, sd ^= sd << 17, sd ^= sd >> 5;
} int main()
{
int cnt = 0;
long double tot = 0;
while (true)
{
cnt++;
for (int i = 1; i <= n; i++) vis[i] = 0;
int tmp = 0, t = 0;
while (tmp < n)
{
tot += ++t;
int now = rd() % n + 1;
tmp += !vis[now]; vis[now] = true;
}
if (cnt % 1000000 == 0)
{
cout << cnt << " " << tot / cnt << endl;
}
}
return 0;
}

这是一份用于随机检验的代码,但是会发现收敛后依然跟答案相差很大——事实证明,这是个检验随机数性能的好方法,我们上面代码中的 rd 函数就比 C++ STL::rand 来得与数学解接近的多得多。

P4550 收集邮票 与 灵异的期望的更多相关文章

  1. P4550 收集邮票

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

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

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

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

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

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

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

  5. P4550 收集邮票-洛谷luogu

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

  6. Luogu P4550 收集邮票

    题目链接:Click here Solution: 本题直接推价格似乎很难,考虑先从购买次数入手 设购买次数\(g(i)\)为当前有\(i\)种不同的邮票,要买到\(n\)种的期望购买次数 可以由期望 ...

  7. [洛谷P4550]收集邮票

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

  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. T-SQL——关于XML类型

    目录 0. 将结果集转化为XML格式 1. 列值拼接为字符串 2. 字符串转换为列值 3. 一些说明 参考 志铭-2021年10月23日 10:43:21 0. 将结果集转化为XML格式 测试数据 I ...

  2. JBOSS未授权访问漏洞利用

    1. 环境搭建 https://www.cnblogs.com/chengNo1/p/14297387.html 搭建好vulhub平台后 进入对应漏洞目录 cd vulhub/jboss/CVE-2 ...

  3. JVM:内存溢出OOM

    JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...

  4. 技术博客——微信小程序UI的设计与美化

    技术博客--微信小程序UI的设计与美化 在alpha阶段的开发过后,我们的小程序也上线了.看到自己努力之后的成果大家都很开心,但对比已有的表情包小程序,我们的界面还有很大的提升空间,许多的界面都是各个 ...

  5. 混合开发框架Flutter

    Flutter开发简介与其他的混合开发的对比 为什么要使用Flutter? 跨平台技术简介 Hybrid技术简介 QT简介 Flutter简介 为什么要使用Flutter? Flutter有什么优势? ...

  6. yum history使用详解(某次为解决误卸载软件的回退实验)

    [root@localhost ~]# yum history list #查看历史 Loaded plugins: fastestmirror ID | Command line | Date an ...

  7. PCIE学习笔记--PCIe错误源详解(二)

    转载地址:http://blog.chinaaet.com/justlxy/p/5100057799 这篇文章主要介绍事务(Transaction)错误.链路流量控制(Link Flow Contro ...

  8. oracle静默安装完成后,重启数据库,错误ORA-01102: cannot mount database in EXCLUSIVE mode

    静默安装oracle完成后,登录数据库激活用户,无法更改,提示未载入数据库,关闭后重启报错: 1.找到安装目录下的$ORACLE_HOME/dbs/ 目录下,查看当前使用lkORCL文件的用户(fus ...

  9. AndroidStudio中debug.keystore文件不存在解决办法

    Android项目丢失了debug.keystore,直接重新生存一个key. 在cmd下,进入C:\Users\Administrator\.android目录执行命令如下:  keytool -g ...

  10. 【java+selenium3】自动化基础小结+selenium原理揭秘 (十七)

    一.自动化实现原理 1.创建驱动对象   (1) 首先加载浏览器安装目录下的exe文件 (2) 其次是加载可执行驱动的exe文件,监听等待客户端发送的web service请求. 底层原理如下: 1. ...