1 条题解
-
0
题解
思路
状态含义
在尚未合并的数组中,相邻两个数相等就能少保留一个元素。因此等价地,我们要最大化 个相邻边界中“左右相等”的数量。
处理完 后,只需关心当前最后一个拆分值。若它为 ,下一项 选择左半部分为 时可以合并跨项边界;若 为偶数并拆成两个 ,还可以合并项内边界。
做法
子任务 1:完整枚举
枚举每个 的左半部分 ,构造长度 的数组并直接统计连续段数。复杂度为
子任务 2:显式端点 DP
令 表示处理前 项、且第 项右半部分为 时的最小合并后长度。令 ,则
设上一层最小值为 ,花费部分等于 。所以每层只需扫描所有 ,复杂度 ,其中 。
满分算法:隐式维护最优端点集合
改为最大化已经消去的边界数,并只维护达到当前最优值的所有可能右端点。设这个集合为 ,处理新数 :
- 先删去 中不小于 的值,因为左半部分必须为正数。
- 若 为偶数且 ,可以同时消去跨项边界和项内边界,收益增加 ,新端点只能是 。
- 否则若 非空,至少可以消去跨项边界,收益增加 ;原端点 变为新右端点 。当 为偶数时,也可以只消去项内边界,因此再加入孤立点 。
- 若 为空,无法消去跨项边界。偶数 可以消去项内边界并把集合设为 ;奇数 没有收益,任意 都可作为新端点。
集合始终是一个整数区间与若干孤立点的并。变换 是仿射翻转;用两个参数记录当前坐标系,并用有序集合维护孤立点,就能在总计 时间、 空间内完成所有删除、查询、插入和翻转。
设最多消去
saved个边界,答案为 。正确性说明
显式 DP 的转移枚举了新拆分的全部右端点,并完整区分跨项与项内两个边界,故它给出最优值。满分算法维护的集合恰是显式 DP 中达到全局最优值的端点:四种更新分别对应“两个边界都合并”“只合并跨项边界”“只合并项内边界”和“均不合并”。若两个边界都能合并,其收益严格最大;否则能合并任意一个边界就不会劣于均不合并。因此按上述贪心保留的恰好是下一层所有最优状态。归纳可知最终
saved最大,输出最小长度正确。复杂度
子任务 1 为 ;子任务 2 为 ;满分算法对每个孤立端点至多插入、删除常数次,时间复杂度 ,空间复杂度 。多组数据时把 替换为所有数据的长度总和。
- 1
信息
- ID
- 1247
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者