1 条题解
-
0
题解
思路
若选择第 个怪物作为爆炸中心,普通攻击后仍由连锁爆炸击杀的怪物必须构成包含 的连续段。它们的生命值从 向两侧每走一步至少下降 。为了节省最多普通攻击,应在不超过初始生命值的前提下尽量保留这些生命值。
设 为以 作为最右端、向左每步至少减一时能保留的最大生命值总和, 对称定义。若原数组总生命值为 ,以 为中心的总代价为
其中 在 中各计算一次,而最后还要支付 点爆炸能量。
做法
平方做法枚举中心后向两侧贪心令当前生命值为
min(初始生命值, 上一个生命值-1)。满分做法线性求 。处理位置 时,需要找到最近的 ,满足 ;同时保留生命值不能降到零,所以还有边界 。最近合法位置由维护 的单调栈得到。设 ,则新形成的等差段贡献
若没有在零处截断,再加上 。反转数组同样计算 ,最后枚举中心取最小值。
复杂度
每个位置至多进栈、出栈一次,时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1361
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者