1 条题解
-
0
题解
思路
可达前缀
若某个整数 能在当前若干次操作后被染色,那么任意不大于 的整数也能被染色。因此,只需记录当前能够染色的最右位置 。
使用一项 时:
- 可以直接染到 ;
- 若此前的最右位置为 ,可以借助不超过 的位置,染到 。
所以使用该项后的最右位置为
颜色 放在最后不会更劣。若 ,答案立即为
YES;若 ,答案一定为NO。其余情况下,只需让颜色 先到达足够靠右的位置 ,最后检查子任务 1:枚举排列
枚举颜色 的所有排列,按上述转移模拟最右位置,再检查颜色 。复杂度为 。
子任务 2:子集动态规划
令 表示恰好使用集合 中颜色后,最右位置的最大值。枚举下一个加入的颜色,并按可达前缀转移。因为转移关于旧的 单调,只保留最大值不会丢失最优方案。
复杂度为 ,空间复杂度为 。
做法
满分算法
将颜色 按 从小到大排序,记排序后的项为 。令 表示只使用前 项时能到达的最右位置。
第一项只能直接给出
加入第 项时,有四种必要候选:
- 不使用新项扩张,保留 ;
- 新项直接染到 ;
- 先处理前缀,再用新项扩张到 ;
- 先用第 项直接染到 ,再用第 项扩张到 。
于是
$$f_i=\max\left(f_{i-1},A_i,A_{i-1}+B_{i-1},\min(f_{i-1},A_i)+B_i\right).$$正确性说明
考虑一个最优操作顺序。若相邻两项满足较小的 在较大的 之后,可以交换这两项;除“较大 的项先提供跳板、较小 的项随后使用自己的 ”这一情形外,交换不会使最右位置变差。这个唯一例外恰好产生候选 。因此,前 项的最优结果完全由上述四个候选覆盖,递推得到全局最优最右位置。
最后让颜色 执行操作,判定 即可。
复杂度
每组测试数据排序耗时 ,递推耗时 ,空间复杂度为 。所有测试数据中 的总和不超过 。
- 1
信息
- ID
- 1343
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者