loading...

AIGC标识 DP, DS 复习题(7.14)

[BZOJ2964]Boss单挑战

在 RPG 游戏的最后一战中,主角与 Boss 单挑,共 \(N\) 回合,每回合主角先行动,然后 Boss 攻击。

  • 主角属性:气血上限 \(HP\)、魔法上限 \(MP\)、愤怒上限 \(SP\),初始均为满值。
  • Boss 气血上限为 \(M\)

主角每回合可选行动(5 种)

  1. 普通攻击:对 Boss 造成 \(X\) 点伤害,自身愤怒增加 \(DSP\)(不超过 \(SP\))。
  2. 法术攻击:共有 \(N_1\) 种,第 \(i\) 种消耗 \(B_i\) 点魔法,造成 \(Y_i\) 点伤害(需当前魔法 \(\ge B_i\))。
  3. 特技攻击:共有 \(N_2\) 种,第 \(i\) 种消耗 \(C_i\) 点愤怒,造成 \(Z_i\) 点伤害(需当前愤怒 \(\ge C_i\))。
  4. 使用 HP 药水:恢复 \(DHP\) 点气血(不超过 \(HP\))。
  5. 使用 MP 药水:恢复 \(DMP\) 点魔法(不超过 \(MP\))。

Boss 攻击:第 \(i\) 回合结束后,Boss 造成 \(A_i\) 点伤害。若主角气血 \(\le 0\) 则死亡。

判定

  • 若能在 \(N\) 回合内击杀 Boss(Boss 气血 \(\le 0\)),设最早击杀回合为 \(x\),输出 Yes x
  • 若必定会被 Boss 杀死(无论如何选择都会死亡),输出 No
  • 否则输出 Tie

\(1 \le N,HP,MP,SP\le 10^3\),\(1 \le M \le 10^6\)

简单 dp 题,读题时间超过做题时间。

\(N,HP,MP,SP\) 同一量级,允许 \(O(N^2)\)。考虑到 HP, MP, SP 三者的增加互不影响。独立 dp。

不考虑死亡,令 \(f_{i,j}\) 表示初始 \(MP=j\),经过 \(i\) 回合能打掉 Boss 多少血。同理对于 \(SP\) 定义 \(g_{i,j}\)。两个都很好 \(n^2\) 求。接下来可以算出最少几个回合的攻击可以干掉 Boss。

然后令 \(h_{i,j}\) 表示前 \(i\) 回合结束后,\(HP=j\),最多能进行几次攻击(即非回血回合)。简单 \(n^2\) dp 搞定。最后枚举回合数,判断在这个回合之前能不能干掉 Boss,即攻击回合此数超过了斩杀线。但还有个点要注意,最后一击时 Boss 无法对你造成攻击。

[WC2013] 糖果公园

给定一棵 \(n\) 个节点的树,长为 \(m\) 的序列 \(v_i\),长为 \(n\) 的序列 \(w_i\),以及点上的权值 \(c_i\)。询问路径 \((u, v)\),设 \(cnt_i=\sum _{x \in (u, v)} [c_x=i]\)

\[\sum _{i=1}^m v_i \sum _{j=1}^{cnt_i} w_i \]

另外还有单点修改 \(c\)

\(n, m, q\le 10^5\)

树上莫队+帯修莫队。

怎么将路径拍到序列上,考虑树的 dfs 序,记录进入子树时间戳和离开子树时间戳 \((\ell _i, r_i)\)

\(\ell _i\) 上,放一个 \(+i\);在 \(r_i\) 上,放一个 \(-i\)

莫队移动指针时:增加一个 \(+i\) 表示加入 \(i\) 点影响,反之消除;增加一个 \(-i\) 表示消除 \(i\) 点影响。

对于 \(u, v\) 询问,就只需要查 \([\ell_u, \ell_v]\) 区间了,然后就是一些边角料判一下就好了。

[CCO 2023] Travelling Trader

给定一个 \(n\) 个节点的树,每个节点有权值 \(p_i\),老板的阈~值~ \(k\)

从第一个节点出发,每次只能移动到相邻节点;只有你到达某个节点时,可以选择获得利润 \(p_i\),但一个节点只能获得一次;如果连续超过 \(k\) 步都没有获得利润,你将被老板辞~职~。

在被老板辞~职~前,求出你能获得的总利润最大值,构造方案。

\(n \le 2\cdot 10^5, k \le 3\)

[Ynoi2024] 弥留之国的爱丽丝

给你 \(n\) 个结点和 \(m\) 条有向边,点编号为 \(1,2,\dots,n\)。每条边的颜色是黑色或者白色。一开始所有 \(m\) 条边都是黑色的。

你需要进行 \(q\) 次操作,有两种操作:

  • 1 k:将第 \(k\) 条边的颜色进行反转。

  • 2 u v:询问是否能从 \(u\) 只经过黑色的边走到 \(v\)

\(2 \le n \le 5 \times 10^4, 1 \le m \le q \le 10^5, 1 \le k \le m, 1 \le u,v \le n, u\neq v\)

该问题不弱于可达性统计,故常数大致应该是 \(\omega ^{-1}\) 级别的。

考虑到有修改操作,按时间轴分块,设立阈值 \(B\),每 \(B\) 个操作重构一次。

对于同块内的修改操作,我们将静态黑边搞出来缩点,处理静态边中的可达性。对于块内的关键点只有 \(2B\) 个,动态边有 \(B\) 个。每次查询时暴力跑 bfs,由于已经处理了可达性,可以按照可达性建一个新图,然后这个图就是一个 \(2B\) 个点(包含关键边的端点和询问点 \(u, v\),共有 \(2B\) 个),直接跑 bfs 看看 \(u\) 能不能到 \(v\) 就可了。所以总共的复杂度是 \(qB^2\),可以用 bitset 优化到 \(\mathcal O(\omega^{-1}qB^2)\)

而暴力重构的复杂度为 \(\mathcal O\left((n+m)\dfrac{q}{B}+\omega^{-1} nq\right)\)。总复杂度为:\(\mathcal O\left(nq\omega^{-1}+\omega^{-1}\left(\omega (n+m)\dfrac{q}B{}+qB^2\right)\right)\)

左边恐怕没有右边紧张。所以考虑平衡右式复杂度:\(\omega (n+m)\dfrac{q}B+qB^2 \ge 3\sqrt[3]{\dfrac{(n+m)^2\omega^2 q^3}{4}}\)\(\omega (n+m)\dfrac{q}B=2qB^2\) 时,即 \(B=O(\sqrt [3] {\omega(n+m)})\) 时取到。时间复杂度为:\(\mathcal O\left(\dfrac{nq+q^{5/3}\omega ^{2/3}}{\omega}\right)\)

posted @ 2026-07-14 16:38  goldspade  阅读(7)  评论(1)    收藏  举报