1 条题解
-
0
题解
思路
令 ,把生命值为 看成 。若第 个位置一共被操作 次,则必须有
一旦各个 确定,用区间操作形成这个覆盖次数序列的最少操作数为
因此问题变为:给每个 加上非负整数倍的 ,使上述正差分之和最小。
做法
子任务 1:提升次数动态规划
对每个位置枚举提升次数 。存在最优解满足 :若某个连通段上的提升次数都超过 ,整体减去一层不会增加任何正差分;反复处理即可得到该界。
设 表示处理到位置 且 时的最小代价,转移为
$$dp_i(q)=\min_p\left(dp_{i-1}(p)+\max(0,b_i+qk-b_{i-1}-pk)\right).$$时间复杂度为 ,空间复杂度为 。
子任务 2:模值非降
若 ,直接取所有 ,代价为 。任何一次提升都会额外引入不少于原正差分的代价,不能得到更优结果。因此线性扫描即可。
子任务 3:反悔贪心
记 ,并从左到右处理差分 。
若 ,当前没有正差分贡献,但以后可以把一段前缀提升一层,把代价改为 ,于是将 放入候选集合。
若 ,可以直接支付 ;也可以反悔,使用此前某个候选代价。把 也放进候选集合,取集合最小值计入答案并删除它。候选集合用最小堆维护。
时间复杂度为 ,空间复杂度为 。
正确性证明
引理 1
固定覆盖次数序列 后,最少操作数等于 。
证明。 在位置 必须开始 个区间;从位置 到 ,若覆盖次数增加,就必须再开始 个新区间。这给出下界。让已有区间尽量向右延伸,并只在覆盖次数增加时开启新区间,恰能达到该下界。
引理 2
处理正差分 时,所有尚未使用的直接方案和前缀提升方案中,选择最小代价不会损失最优性。
证明。 每个正差分都必须由一次直接支付或一次此前的前缀提升消除。所有候选只通过各自的两个边界影响正差分,内部差分不变;交换两个正差分所使用的候选不会改变后续可用候选集合。故当前选择最小代价满足交换论证。
定理
反悔贪心得到全局最少操作数。
证明。 引理 1 将原问题等价地化为最小化提升后序列的正差分和。扫描过程中,非正差分产生一个未来可用的前缀提升候选,正差分同时产生直接候选。由引理 2,每次取当前最小候选均可扩展为某个全局最优方案。归纳到全部位置,所得答案即全局最优值。
复杂度
满分算法对每个测试用例的时间复杂度为 ,空间复杂度为 ;所有测试用例的 之和不超过 。
- 1
信息
- ID
- 1397
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者