先来看这篇题解
一些解释:
本题一共有两个对象,轮数和卡牌。我们发现从轮数的角度考虑期望不好计算,所以我们从卡牌的角度考虑
其实不用管这篇题解说的什么线性性,我们感性理解卡牌造成的期望伤害肯定是卡牌实际被使用的概率乘以其伤害值的总和
我们可以比较轻松地证明这一点。我们对任意一个样本,一共有轮,设其发生的概率是,一共有张卡牌被发动,伤害值分别是,那么这个样本的期望就是,我们考虑其中的某一张卡牌,他在这个样本中对期望的贡献是,那么我们考虑整个样本空间,把的所有概率加起来就可以得到结论了
然后接下来我们要求某一张卡牌发动的概率。我们考虑求反面就是不发动的概率,求
就像题解说的一样,我们发现中途发动一张卡牌立马结束的条件很烦,所以我们最初的想法是考虑第张卡牌前面有哪些卡牌被发动了,但是这样时间复杂度就太大了,所以我们考虑抽象一点,就认为有张卡牌发动了,但是不知道具体是哪张(其实我做的时候是想到这里的,但是却不知道怎么继续往下推导)
这个时候精髓就来了,为什么题解那样的推导成立?其实我们可以从条件概率的角度考虑。在表示的任意一个样本中,有张卡牌发动了就表示有张卡牌没发动,注意在这个条件下,前面张牌的状态是确定的,要么发动了要么没发动(尽管没发动的牌没有体现在轮的某一轮中),所以在这轮中,当某一轮没有被这张牌中的某一张牌占据的时候,我们一直循环到第张牌之前的概率都是,表示要么发动了要么没发动(想一想,条件概率不就是这么算的吗?已经确定了的东西的概率都变成了),所以一直循环到第张牌的时候,只用考虑第张牌的概率就好了
那么求解的时候是一样考虑的。但是有一个小点要注意,比如说求的时候,第张牌如果不选择,为什么还要乘上那一坨?因为表示的所有样本是包含了选择的情况的(即第张牌在某一轮被发动了),所以我们要排除这种情况
这道题目给我们的启示就是注意,这种“隐性”的条件概率,没有体现在样本空间的对象的概率也是确定的。而且以后多从条件概率的角度考虑问题
update 2024.5.4
其实这道题目为什么要以卡牌为考虑对象,就是因为我们可以像罗森的离散数学教材一样考虑,我们直接将轮游戏作为一个整体(一个实验)去考虑这个实验出来的实验结果对所有卡牌的影响
然后算每张卡牌发动的概率的时候,就是没办法知道哪些卡牌被发动了(比如设表示前轮第张卡牌发动的概率就推不走)。我们设置局部状态推不走的话,就直接设置全局状态,就像题解那样设置(其实也就是我们没办法确定具体是哪张牌,就退而求其次,先确定总共有张牌被选了,但是这个时候肯定就要把轮数这一维去掉了,只能考虑全局了)
然后为什么可以这么推?其实最初版本写的条件概率那里不是太好理解。实际上,对于确定的任意一个样本中,前张牌的状态的确确定了,但是在每一轮中如果可以走到第张牌的决策,第张牌到第张牌无论怎么决策都不会影响每一轮前张牌的发生的情况,所以这个原因才是为什么我们可以直接用作为乘数
update 2024.8.13
这里还有一篇题解写的也很不错
感觉这道题目就是从横着算概率变成从竖着算概率了。每一行就是每一轮游戏,一共有行,每一列就是卡牌,一共有列,于是可以描述这个实验的进程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构