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

设 \(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. CQL和SQL的CRUD操作比较

    数据进行CRUD操作时,CQL语句和SQL语句的异同之处. 1.建表 2.CRUD语句比较 3.总结 1.建表 在此之前先分别创建两张表,插入数据,用来测试然后进行比较 在SQL数据库里面创建表 在C ...

  2. Java:ConcurrentHashMap类小记-2(JDK7)

    Java:ConcurrentHashMap类小记-2(JDK7) 对 Java 中的 ConcurrentHashMap类,做一个微不足道的小小小小记,分三篇博客: Java:ConcurrentH ...

  3. Github Actions 实践

    Github Actions 实践 Github Actions 是 Github 的持续集成服务,通过在 repo 发生特定的行为时执行指定的命令实现自动测试.自动部署等功能. 基本术语 workf ...

  4. RabbitMQ处理未被路由的消息

    我们经常使用消息队列进行系统之间的解耦,日志记录等等.但是有时候我们在使用 RabbitMQ时,由于exchange.bindKey.routingKey没有设置正确,导致我们发送给交换器(excha ...

  5. 2021.8.8考试总结[NOIP模拟33]

    T1 Hunter 考场上一看期望直接状压拿了$45pts$跑了.结果正解只用$4$行? 把问题转化为一号猎人之前死的猎人数的期望加一. 期望的线性性. 对每个猎人$i$,$w_i+w_1$种情况中有 ...

  6. Relocations in generic ELF (EM: 40)

    最近在搞机器上的wifi热点,需要移植一大堆东西,如hostapd\wpa_suppliant.dhcp等,这些玩意又依赖其他的一大堆库的移植,比如libnl,openssl等,今天在移植编译libn ...

  7. 基于 OSPF 路由的邻居邻接关系发现实践

    1.实验目的 理解 OSPF 邻居关系和 OSPF 邻接关系的含义及差别 观察 OSPF 邻居邻接关系的建立过程 观察 OSPF 链路状态数据库的同步过程 2.实验原理 OSPF 网络中,路由器在发送 ...

  8. 如何将声学的spectrogram(声谱图)重新反变换成时域语音信号

    最近在研究一些信号分析的事情,感兴趣如何将频谱信号反变换成时域信号.fft 与ifft可以顺畅的转变,但是这个是一帧信号,当时间较长的信号再一起是,通过反变换变成一帧一帧的时域信号,如何把他们拼接起来 ...

  9. Linux常用命令和快捷键整理:(1)常用命令

    前言: Linux常用快捷键和基本命令整理,先上思维导图: 1.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限) ...

  10. stom消费kafka消息速度慢的问题

    原来代码如下 KafkaSpoutConfig<String, String> kafkaSpoutConfig = KafkaSpoutConfig.builder(kafka_serv ...