小美有一个长度为 n 的数组,她最多可以进行 k 次操作,每次操作如下: 1. 选择两个整数 i, j(1 ≤ i < j ≤ n) 2. 选择两个整数 x, y ,使得 x × y = a_i × a_j 3. 将 a_i 替换为 x ,将 a_j 替换为 y 她希望最多进行 k 次操作之后,最后数组中的元素的总和尽可能大。
一行两个整数 n, k ,表示数组的长度和操作的次数。 一行 n 个整数 a_1, a_2, ·s, a_n ,表示数组的元素。 1 ≤ k < n ≤ 10^5 1 ≤ a_i ≤ 10^5
输出一个整数,表示最后数组中的元素的总和的最大值,由于答案可能很大,你只需要输出答案对 10^9 + 7 取模的结果。
5 2 1 2 3 4 5
65
考点:贪心
数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:贪心
本题切入点
每次操作把 a_i×a_j 拆成 x×y 且 x+y 更大——把较大的那个数拆出 1(变成 a−1 和 1×另一个数),优先作用在最大元素上。
每一步都取当前最优,靠问题性质保证局部最优能拼成全局最优。
思路框架(贪心 通法 · 非本题专属)
实现要点:贪心题关键在于排序规则:按什么关键字排序决定了策略是否正确。
复杂度:时间 O(n log n)(含排序) | 空间 O(1) ~ O(n)
该范式的通法易错点
对照本题
样例 1:输入 5 2 / 1 2 3 4 5 → 输出 65
第一次操作后,数组变为 [1, 2, 12, 1, 5]
第二次操作,数组变为 [1, 2, 60, 1, 1]
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年美团秋招编程岗第三批笔试。