#5796. B. Two Arrays And Swaps

B. Two Arrays And Swaps

B. Two Arrays And Swaps


🔁 B. 两个数组与交换

时间限制: 1 秒 内存限制: 256 MB


📘 题目描述

给定两个数组 ab,它们都包含 n 个正整数。 同时给定一个整数 k,表示你最多可以进行的交换次数。

在一次操作中,你可以选择两个下标 ij1 ≤ i, j ≤ n),并交换 a[i]b[j] 的值。

⚠️ 注意:

  • ij 可以相等,也可以不相等

  • 例如:

    • 交换 a[2]b[2]
    • 交换 a[3]b[9]

🎯 任务目标

最多进行 k 次交换 的前提下, 使数组 a 的元素之和尽可能大

你需要对 t 组独立的测试用例 分别求解。


📥 输入格式

  • 第一行:一个整数 t 表示测试用例的数量

  • 接下来 t 组测试用例,每组格式如下:

    • 第一行:两个整数 nk

      • n:数组 a 和 b 的长度
      • k:最多允许的交换次数
    • 第二行:n 个整数 a1, a2, …, an 表示数组 a

    • 第三行:n 个整数 b1, b2, …, bn 表示数组 b


📤 输出格式

对于每个测试用例,输出一行:

  • 一个整数,表示在不超过 k 次交换的情况下, 数组 a 能取得的最大可能元素和

📌 数据范围

  • 1 ≤ t ≤ 200
  • 1 ≤ n ≤ 30
  • 0 ≤ k ≤ n
  • 1 ≤ 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 次即可

常见解法思路:

  1. 将数组 a 升序排序
  2. 将数组 b 降序排序
  3. 从前往后比较,最多交换 k
  • 贪心策略
  • 排序后逐一决策
  • “一次交换的收益是否为正”