题解 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 @   Z3k7223  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示