P4550 收集邮票

news/2025/10/5 23:17:14/文章来源:https://www.cnblogs.com/mLazy/p/19127162
难度 算法s 日期 题目链接
提高+/省选− 数学期望、递推、倒推 2025-07-21 https://luogu.com.cn/problem/P4550

这道题,巧妙之处在于如何推出期望的递推式。太妙了,回味无穷。慢慢消化吧。

题意简述

总共有 \(n\) 种邮票,我们希望每种邮票至少买到一张。每次购买时,买到任意一种邮票是等可能的。而且我们第 \(k\) 次购买时,需要花费 \(k\) 元钱。

求:花费的期望。

Part I

\(99\%\) 是老师讲解才懂的)

如果直接求 “要买到 \(k\) 种邮票,期望的购买次数”,很难推。不妨先求出:已经买到 \(k\) 种邮票,期望还要买几次,我们记为 \(f_k\)。体会这里的妙处,前者从前往后考虑(正推),后者从后往前考虑(倒推)。正难则反。 为什么倒推能成呢?因为边界条件 \(f_n=0\),我们是知道的。

在已经买到 \(k\) 种邮票的情况下,我们再买一张,有两种可能:

  • 买到的邮票已经在这 \(k\) 种中,概率为 \(k/n\);这种情况下,状态不会转移,所以期望还要买的次数\((k/n)\times f_k\)
  • 买到了新的邮票,概率为 \((n-k)/n\);这种情况下,状态发生转移,期望还要买的次数\([(n-k)/n]\times f_{k+1}\)

于是得出了递推式:

\[f_k=(\frac{k}{n}\times f_k+\frac{n-k}{n}\times f_{k+1})+1. \]

(末尾的 \(+1\) 是当前消耗一个次数,前面那串是之后消耗的次数。)当然这不是真正的递推式。我们分离出 \(f_k\)

\[(1-\frac{k}{n})f_k=\frac{n-k}{n}f_{k+1}+1\\ \Rightarrow f_k=f_{k+1}+\frac{n}{n-k}. \]

注意我们假设在求 \(f_k\) 时已求出 \(f_{k+1}\)

是不是感觉很神奇?我们在列式子的时候,明明没有求出 \(f_k\),但是式子右边却出现了 \(f_k\) 相当于我们也假设了已知 \(f_k\)(?)。但是看了看题解区似乎没人觉得这里有什么奇怪的。总之那个式子恒成立,能用,就用来递推吧。我称之为 “递归推式法”

聪明的你可能会想,那我们移项——

\[f_{k+1}=f_k-\frac{n}{n-k}, \]

如何呢?可不可以正推?很可惜不行。这个式子理论上是成立的,但是我们不知道边界条件 \(f_0\)。事实上我们想求的就是 \(f_0\) 啊。

Part II

注意:期望花费 = \((1+f_0)\times f_0\div2\) 不成立。

现在考虑怎么求花费的期望。类似地,我们定义 \(g_k\) 表示:已经买到 \(k\) 种邮票,期望还要花的钱。同样考虑倒推:

\[g_k=\frac{k}{n}(g_k+f_k+1)+\frac{n-k}{n}(g_{k+1}+f_{k+1}+1). \]

这里为什么会有 \(f\) 项让我困惑了很久。这样理解:

  • 我们从后往前递推,每次我们记录的是 “从当前” 买到达到目标要花的钱。但是 “当前” 再买一次,要花多少钱和 “当前是第几次购买” 相关,我们不知道 “当前” 确切地要花多少。所以我们不妨设 “当前” 要花 \(1\) 元。

  • 然后我们在递推式中 “弥补”:每次向前推一步,相当于后面的购买每次花费都 \(+1\)。所以就有 \(+f_k\)\(+f_{k+1}\) 的说法了。

把上面的式子分理出 \(g_k\),就得到了真正的递推式:

\[g_k=\frac{k}{n-k}(f_k+1)+g_{k+1}+f_{k+1}+1. \]

同样地,边界条件是 \(g_n=0\)\(g_0\) 就是题目要求的终极答案。

Part Final

所以我们就用一个 for()k=n 递推到 k=0。因为 g[] 的计算依赖于 f[],所以每次我们先推出 f[k],再推 g[k]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P8110 [Cnoi2021] 矩阵

难度 算法s 日期 题目链接普及+/提高 快速幂 2025-09-24 https://luogu.com.cn/problem/看似矩阵快速幂,实则推式子 + 普通快速幂。 题意简述 给定两个长度为 \(n\) 的数列 \(\{a_1,a_2,\dots,a_n\},\{b_1,b_2,\dots,…

F - Clearance

F - Clearance Problem Statement AtCoder Inc.s online shop currently handles $N$ products, and the stock of product $i$ is $A_i$ units remaining. Process the following $Q$ orders in order. The $i$-th …

P9234 [蓝桥杯 2023 省 A] 买瓜

难度 算法s 日期 题目链接普及+/提高 折半搜索、剪枝 2025-07-20 https://luogu.com.cn/problem/P9234我觉得此题没有参考价值。 本题解聚焦于剪枝优化上。如果只是简单地使用折半搜索,很容易 \(\text{TLE}\)。我感觉…

P1044 [NOIP 2003 普及组] 栈

难度 算法s 日期 题目链接普及− DP 2025-05-21 https://luogu.com.cn/problem/P1044因为本人 DP 很差,故撰此文巩固一下。 本文是对 P1044 [NOIP 2003 普及组] 栈 题解 的详细解释。 写的很直白了。。。几乎没有理解…

餐饮环境评估在哪个网站做网站开发一定要用框架吗

1.Kafka中的ISR、AR又代表什么?ISR:与leader保持同步的follower集合AR:分区的所有副本2.Kafka中的HW、LEO等分别代表什么?LEO:没个副本的最后条消息的offsetHW:一个分区中所有副本最小的offset3.Kafka中是怎…

宁波小型建网站公司新网站 seo

效果图 在uniapp微信小程序/手机h5网页网站/安卓app/苹果app/支付宝小程序/nvue等(全平台完美兼容)开发中,实现uniApp各端都兼容的 “刻度尺(横格尺 | 尺子)” 手势左右两侧拖动、手指滑动刻度尺功能,水平刻度尺,支持自定义尺子颜色、大小、刻度、滑动时的步进值、最大…

P1080 [NOIP 2012 提高组] 国王游戏

难度 算法s 日期 题目链接普及+/提高 贪心、邻项排序 2025-07-25 https://luogu.com.cn/problem/有 \(n\) 个大臣和一个国王,每个大臣左、右手各有一个数,分别记为 \(a_i,b_i\),国王手上也有数,记为 \(a,b\)。现在…

音响没声音

联想拯救者x9000p笔记本(win11)之前总来不来就没音(只能听到特定几个音调),然后隔一段时间重启莫名其妙就好了,以为是静电。 这次又故障了,就把如图关了,就解决了,查了驱动也都是最新,网上有人说这个会消杂音…

P1654 OSU!

难度 算法s 日期 题目链接提高+/省选− 数学期望、递推 2025-07-21~22 https://luogu.com.cn/problem/P1654似乎是一道蛮经典的期望递推题。 洛谷上的题解看不懂,老师讲的也很简略。只有自己推起来感觉很复杂。。。心…

响应式网站几个断点毕节市城乡建设局网站

文章目录 年费和小额账户管理费减免政策:每家银行均可有一张借记卡享受双免政策减免政策:代发工资、低保、社保、医保、失业保险、养老金、退休金、住房公积金等账户减免政策:二、三类电子账户一类卡、二类卡和三类卡二、三类电子账户不收取年…

做网站网络合同石河子网站制作

问题如下;Java代码中的方法是:Rule foo(){return sequence(foo(), x());}这将引发解析循环,当然应该避免;但是,这是合法的:Rule foo(){return sequence(x(), foo());}现在,代码中的其他地方我可以访问RuleMethod,这是一个扩展MethodNode的类,因此我可以访…

10/5

今日学习了Java,背诵了英语单词,明日继续

10/4

今日学习了Java,背诵了英语单词,明日继续

DynamoDB十年演进:云原生数据库的技术革新

本文深入探讨了Amazon DynamoDB云原生数据库的十年发展历程,从Dynamo研究论文到完全托管服务的演进,涵盖了分布式系统架构设计、弹性扩展机制、毫秒级性能优化等核心技术突破,以及全球表、事务支持等创新功能的发展…

惠州网站建设英语怎么快速搭建网站

当用C语言来实现猜数字游戏时,我们可以设计一个简单的游戏规则:计算机随机生成一个1到100之间的整数,玩家需要通过猜测来猜出这个数字。游戏会根据玩家猜测的数字与目标数字的大小关系给出提示,直到玩家猜中为止。 下面是一个用C…

详细介绍:【python】uv管理器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

企业微网站开发锛网站

现在,人工智能的发展处于跳跃式阶段,我们也对AI在大型数据集的应用进展感到吃惊。更重要的是,那些我们没有跟踪的数十亿张照片或餐厅的评论并没有被遗漏掉:迁移学习技术让收集数据变得更加“容易”。另外,得益于PyTorc…

深圳网络做网站app开发费用大概多少

22/06/2005 12:22 FPOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。下面例子中使用的表来自Oracle自带的HR用户下的表,如果没…

NotImplementedError: Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.

NotImplementedError: Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array. This error may indicate that youre trying to pass a Tensor to a NumPy call, which is not supportednumpy …