题解 P11630 [WC2025] 士兵

更好的阅读体验

令我痛失牌子的题目。

Solution

来一种大众做法。

考虑 DP,令 \(f_{i,j}\) 为在前 \(i\) 个人中,第 \(i\) 个人打了 \(j\) 下的最大收益,转移只与 \(f_{i-1}\) 有关,这是简单的。进一步的,我们发现每一步的血量要么跟上一步相等,要么刚好更改这个人的状态(生死取反),即转移只用考虑 \(f_{i,a_i-1},f_{i,a_i}\),剩下的直接继承,当然还有一个后缀加贡献 \(b_i\) 的操作。

\(f\) 滚动一下,则有转移:

  • \[f_{a_i-1}\gets \max(f_{a_i-1},\max_{a_i\le j\le V}\set{f_j}) \]

  • \[f_{a_i}\gets \max(f_{a_i},\max_{0\le j\le a_i-1}\set{f_j-m\times(a_i-j)}) \]

  • \[f_j\gets f_j+b_i(j\ge a_i) \]

第二个变形一下就是

\[f_{a_i}\gets \max(f_{a_i},\max_{0\le j\le a_i-1}\set{f_j+mj}-ma_i) \]

所以按 \(a_i,a_i-1\) 离散化一下,开两棵线段树,分别维护 \(f_i\)\(f_i+mi\),转移就全部变成线段树的普通操作了。

AC 记录,码风很烂常数也很大。

posted @ 2025-02-20 23:23  Z3k7223  阅读(35)  评论(0)    收藏  举报