亚瑟王

先来看这篇题解

一些解释:

本题一共有两个对象,轮数和卡牌。我们发现从轮数的角度考虑期望不好计算,所以我们从卡牌的角度考虑

其实不用管这篇题解说的什么线性性,我们感性理解卡牌造成的期望伤害肯定是卡牌实际被使用的概率乘以其伤害值的总和

我们可以比较轻松地证明这一点。我们对任意一个样本,一共有\(r\)轮,设其发生的概率是\(p\),一共有\(t\)张卡牌被发动,伤害值分别是\(c_1,c_2,...,c_t\),那么这个样本的期望就是\(p(c_1+c_2+...+c_t)=pc_1+pc_2+...+pc_t\),我们考虑其中的某一张卡牌\(c_i\),他在这个样本中对期望的贡献是\(pc_i\),那么我们考虑整个样本空间,把\(c_i\)的所有概率加起来就可以得到结论了

然后接下来我们要求某一张卡牌发动的概率。我们考虑求反面就是不发动的概率,求\(fp[i]\)

就像题解说的一样,我们发现中途发动一张卡牌立马结束的条件很烦,所以我们最初的想法是考虑第\(i\)张卡牌前面有哪些卡牌被发动了,但是这样时间复杂度就太大了,所以我们考虑抽象一点,就认为有\(j\)张卡牌发动了,但是不知道具体是哪\(j\)张(其实我做的时候是想到这里的,但是却不知道怎么继续往下推导)

这个时候精髓就来了,为什么题解那样的推导成立?其实我们可以从条件概率的角度考虑。在\(f[i-1][j]\)表示的任意一个样本中,有\(j\)张卡牌发动了就表示有\(i-j-1\)张卡牌没发动,注意在这个条件下,前面\(i-1\)张牌的状态是确定的,要么发动了要么没发动(尽管没发动的牌没有体现在\(r\)轮的某一轮中),所以在这\(r\)轮中,当某一轮没有被这\(j\)张牌中的某一张牌占据的时候,我们一直循环到第\(i\)张牌之前的概率都是\(1\times 1\times 1...\)\(1\)表示要么发动了要么没发动(想一想,条件概率不就是这么算的吗?已经确定了的东西的概率都变成\(1\)了),所以一直循环到第\(i\)张牌的时候,只用考虑第\(i\)张牌的概率就好了

那么求解\(f\)的时候是一样考虑的。但是有一个小点要注意,比如说求\(f[i][j]\)的时候,第\(i\)张牌如果不选择,为什么\(f[i-1][j]\)还要乘上那一坨?因为\(f[i-1][j]\)表示的所有样本是包含了选择\(i\)的情况的(即第\(i\)张牌在某一轮被发动了),所以我们要排除这种情况

这道题目给我们的启示就是注意,这种“隐性”的条件概率,没有体现在样本空间的对象的概率也是确定的。而且以后多从条件概率的角度考虑问题

update 2024.5.4

其实这道题目为什么要以卡牌为考虑对象,就是因为我们可以像罗森的离散数学教材一样考虑,我们直接将\(r\)轮游戏作为一个整体(一个实验)去考虑这个实验出来的实验结果对所有卡牌的影响

然后算每张卡牌发动的概率的时候,就是没办法知道哪些卡牌被发动了(比如设\(f[i][j]\)表示前\(i\)轮第\(j\)张卡牌发动的概率就推不走)。我们设置局部状态推不走的话,就直接设置全局状态,就像题解那样设置(其实也就是我们没办法确定具体是哪\(j\)张牌,就退而求其次,先确定总共有\(j\)张牌被选了,但是这个时候肯定就要把轮数这一维去掉了,只能考虑全局了)

然后\(fp\)为什么可以这么推?其实最初版本写的条件概率那里 不是太好理解。实际上,对于%f[i-1][j]%确定的任意一个样本中,前\(i-1\)张牌的状态的确确定了,但是在每一轮中如果可以走到第\(i\)张牌的决策,第\(i\)张牌到第\(n\)张牌无论怎么决策都不会影响每一轮前\(i-1\)张牌的发生的情况,所以这个原因才是为什么我们可以直接用\(f[i-1][j]\)作为乘数

posted @ 2024-03-11 23:05  最爱丁珰  阅读(1)  评论(0编辑  收藏  举报