P3239 [HNOI2015] 亚瑟王

P3239 [HNOI2015] 亚瑟王 题解

洛谷的题解说的稀里糊涂的。

题意简述:给一个卡牌序列,你要玩 \(m\) 轮游戏。每轮遍历一次数组,找到一张没有被使用的卡牌以 \(p(i)\) 的概率打出造成 \(d(i)\) 的伤害。

求造成伤害的期望。

数据范围\(1\le n\le 220,0\le m\le 132\)

Solution

一眼概率期望 dp,考虑怎么推式子。

由期望的性质,考虑将求期望转为求每张牌被打出的概率。

直接设 \(F(i)\) 为第 \(i\) 张牌打出的概率,容易想到,有:

\[ans=\sum_{i=1}^n F(i)\cdot d(i) \]

考虑求出 \(F(i)\) ,我们发现第 2 张到第 \(n\) 张卡牌求概率被前面的东西限制,即会跳过某些轮。

我们先写出第一张卡牌的概率:

\[F(1)=1-(1-p(i))^m \]

莫名像 2024新高考II卷数学 18 题

我们考虑第 \(i\) 张卡牌的限制,假设前面有 \(j\) 轮被跳过(卡牌被使用导致结束回合)。

我们写成一个求和式的形式,设 \(f(i,j)\) 为前面 \(i\) 张卡牌,恰好有 \(j\) 个回合被跳过的概率。有:

\[F(i)=\sum_{j=0}^mf(i-1,j)\cdot (1-(1-p(i))^{m-j}) \]

这个式子的意思是其中有 \(j\) 个回合被跳过,剩下有 \(m-j\) 个回合,美国回合都有可能打这出张卡牌。

这下我们只需求出 \(f(i,j)\) 的递推式即可。

我们分两种情况:

  1. \(i\) 张打出,即有 \(m-j+1\) 个回合有概率打出:\(f(i,j)=f(i-1,j-1)\cdot (1-(1-p(i))^{m-j+1})\)

  2. \(i\) 张被雪藏,即剩下 \(m-j\) 个回合都没被打出:\(f(i,j)=f(i-1,j)\cdot (1-p(i))^{m-j}\)

于是我们先求 \(f\) 再求 \(F\) ,最后统计答案即可。时间复杂度为 \(O(Tnm)\)

可能根据写法问题需要预处理 \((1-p(i))^k\)

posted @ 2024-10-04 18:36  lichenyu_ac  阅读(21)  评论(0)    收藏  举报