1 条题解
-
0
题目解析
给定一个长度为 的数组 ,初始全部为红色。
操作分为两个阶段:- 恰好选择 个元素涂成蓝色(这 个元素称为“初始蓝色”)。
- 反复选择一个有蓝色邻居的红色元素,将其涂蓝,直到全部蓝色为止。
成本定义为:初始选择的 个元素的和 最后一个被涂蓝的元素的值。
目标:最大化成本。
关键观察
1. 成本的上界
成本 = 个初始蓝色元素的和 最后一个被涂蓝的元素
数组中的 个最大元素的和
(因为 个初始蓝色元素和最后一个蓝色元素最多覆盖 个不同位置)。因此最大可能成本 ≤ 数组中最大的 个元素的和。
2. 何时能达到这个上界?
情况 A:
假设数组中最大的 个元素的位置是 (值从大到小排列)。
我们可以这样构造:
- 初始蓝色选择:(共 个位置,不选 )。
- 涂色顺序:
- 首先由初始蓝色向外扩散,最终除了 之外,所有元素都会变蓝(因为 左右邻接位置中有初始蓝色,例如 或 )。
- 当只剩 为红色时,它的邻居( 或 )已经是蓝色,所以可以最后涂 。
这样:
- 个初始蓝色的和为:除了 外的 个最大元素之和。
- 最后一个涂蓝的元素是 (也是最大的 个元素之一)。
总成本 = 个最大元素的和 第 大元素的值 = 最大的 个元素的和。
结论:当 时,可以达到上界。
情况 B:
此时上界是最大的两个元素的和,但能否达到?
- 初始选一个元素 (记为 )。
- 最后一个被涂蓝的元素必须是某条路径的终点。
- 由于只有一次初始蓝色,整个涂色过程是从 向两侧扩散。
- 最后一个涂蓝的元素只能是最左端或最右端的元素。
为什么呢?
想象从 开始,每次只能涂邻居,那么扩展会像波浪一样左右推进,最后涂色的位置一定是左端 或右端 。所以:
- 如果初始选 (),最后涂的是 或 ,成本 = 。
- 如果初始选 ,最后涂的是 ,成本 = 。
- 如果初始选 ,最后涂的是 ,成本 = 。
这实际上等价于:
-
初始元素必须与最后一个元素在两端相邻(通过扩展路径)? 不完全是,更简单的观察是:
最后一个被涂的元素只能是 或 。
另一个初始蓝色元素可以是任意其他位置。因此:
- 若最后一个涂的是 ,则初始选 以外的某个元素 (),成本 = ,最大时 取前 个最大值。
- 若最后一个涂的是 ,则初始选 以外的某个元素 (),成本 = ,最大时 取后 个最大值。
但注意最后一个被涂蓝的必须是 或 ,不一定是两个最大值的和。
经过更严谨的分析(如标程所示), 时的最优解是以下两种可能的最大值:
- 最后一个涂 :初始选前 个元素中的最大值(即 ),成本 = 。
- 最后一个涂 :初始选后 个元素中的最大值(即 ),成本 = 。
取两者较大值。
3. 特殊情况 ( 时自动包括)
此时 ,最大 个元素就是整个数组的和,即能达到整个数组的和。
检查标程:
当 时,直接取前 大元素的和,这包括了 的情况,此时就是所有元素的和,符合直觉。
算法步骤
- 读入 。
- 对每个测试用例:
- 读入 和数组 。
- 若 :
- 将 从大到小排序。
- 答案 = 前 个元素的和。
- 若 :
- 答案 =
- 输出答案。
时间复杂度
- 排序
- 总 不超过 ,可轻松通过。
例子验证
例1
答案 = ,匹配输出。例2
排序降序:
前 个元素和 ,匹配输出。例3
,排序降序
前 个元素和 ,匹配输出。
总结
- 时,直接取前 大元素的和。
- 时,分两种情况取最大值,分别对应最后涂 或 。
- 该构造方法能达到理论最大值,因此贪心 + 构造即可。
- 1
信息
- ID
- 6351
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者