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

设 \(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. SingleR如何使用自定义的参考集

    在我之前的帖子单细胞分析实录(7): 差异表达分析/细胞类型注释里面,我已经介绍了如何使用SingleR给单细胞数据做注释,当时只讲了SingleR配套的参考集.这次就讲讲如何使用自己定义/找到的基因 ...

  2. [no_code]OCR表格处理——技术规格说明书

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 技术规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...

  3. poi实现生成下拉选联动

    在我们实际的程序开发中,经常需要用到从excel导入数据中系统中,而为了防止用户在excel中乱输入文字,有些需要用到下拉选的地方,就需要从程序中动态生成模板.本例子简单的讲解一下,如何生成级联下拉选 ...

  4. Noip模拟30 2021.8.4

    T1 毛一琛 考场上打的稳定的$O((2^n)^2)$的暴力.其实再回忆一下上次那道用二进制枚举的题$y$ 就可以知道一样的道理,使用$\textit{Meet In the Middle}$, 按照 ...

  5. [转]浅谈电路设计中应用DDR3处理缓存问题

    本文转自:浅谈电路设计中应用DDR3处理缓存问题_若海人生的专栏-CSDN博客 DDR系列SDRAM存储芯片的高速率.高集成度和低成本使其理所当然成为存储芯片中的一霸.在PC和消费电子领域自是如此,它 ...

  6. python pip whl安装和使用

    转载:https://www.cnblogs.com/klb561/p/9271322.html 1 python的安装 首先,从python的官方网站 www.python.org下载需要的pyth ...

  7. single-number-ii leetcode C++

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  8. NOIP模拟88(多校21)

    前言 对于这套题的总体感觉就是难,然后就是自己很菜... 对于 T1 考试时只会一个最垃圾的背包,考完之后对于思路这一块也不是很顺利,大概这就是薄弱的地方吧. 然后 T2 是比较简单的一道题了,但是考 ...

  9. MySql表、约束、视图

    MySql表.约束.视图 索引组织表 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表成为索引组织表(index organized table). 每张表都有主键,如果创建表 ...

  10. Spark记录(二):Spark程序的生命周期

    本文以Spark执行模式中最常见的集群模式为例,详细的描述一下Spark程序的生命周期(YARN作为集群管理器). 1.集群节点初始化 集群刚初始化的时候,或者之前的Spark任务完成之后,此时集群中 ...