#5796. B. Two Arrays And Swaps
B. Two Arrays And Swaps
B. Two Arrays And Swaps
🔁 B. 两个数组与交换
时间限制: 1 秒 内存限制: 256 MB
📘 题目描述
给定两个数组 a 和 b,它们都包含 n 个正整数。 同时给定一个整数 k,表示你最多可以进行的交换次数。
在一次操作中,你可以选择两个下标 i 和 j(1 ≤ i, j ≤ n),并交换 a[i] 与 b[j] 的值。
⚠️ 注意:
-
i和j可以相等,也可以不相等 -
例如:
- 交换
a[2]和b[2]✅ - 交换
a[3]和b[9]✅
- 交换
🎯 任务目标
在 最多进行 k 次交换 的前提下, 使数组 a 的元素之和尽可能大。
你需要对 t 组独立的测试用例 分别求解。
📥 输入格式
-
第一行:一个整数
t表示测试用例的数量 -
接下来
t组测试用例,每组格式如下:-
第一行:两个整数
n和kn:数组 a 和 b 的长度k:最多允许的交换次数
-
第二行:
n个整数a1, a2, …, an表示数组 a -
第三行:
n个整数b1, b2, …, bn表示数组 b
-
📤 输出格式
对于每个测试用例,输出一行:
- 一个整数,表示在不超过
k次交换的情况下, 数组 a 能取得的最大可能元素和
📌 数据范围
1 ≤ t ≤ 2001 ≤ n ≤ 300 ≤ k ≤ n1 ≤ a_i, b_i ≤ 30
🧪 样例输入
5
2 1
1 2
3 4
5 5
5 5 6 6 5
1 2 5 4 3
5 3
1 2 3 4 5
10 9 10 10 9
4 0
2 2 4 3
2 4 2 3
4 4
1 2 2 1
4 4 5 4
🧪 样例输出
6
27
39
11
17
📝 样例说明
样例 1
a = [1, 2]
b = [3, 4], k = 1
交换 a[1] 和 b[2],得到:
a = [4, 2]
数组 a 的和为 6。
样例 2
不进行任何交换,原数组 a 已是最优。
样例 3
可以进行 3 次交换,将 b 中较大的数换入 a:
a = [10, 10, 10, 4, 5]
总和为 39。
样例 4
k = 0,不能进行任何交换。
样例 5
交换整个数组 a 和 b(不超过 k 次),得到最大和。
🧠 题目提示
这是一个典型的贪心问题:
-
想让 a 的和变大
-
就应该:
- 用 b 中较大的元素
- 去替换 a 中较小的元素
-
每次交换,若
b 的最大值 > a 的最小值,就值得交换 -
最多执行
k次即可
常见解法思路:
- 将数组
a升序排序 - 将数组
b降序排序 - 从前往后比较,最多交换
k次
- 贪心策略
- 排序后逐一决策
- “一次交换的收益是否为正”