​题目传送门​


题目描述

现在有正整数集合 A 和 B,每个集合里有 N 个数,你要建立他们间的一一映射
将每对配对的数字相加可以得到 N 个和,你要做的就是最大化第 K 大的和
2020牛客寒假算法基础集训营6.A——配对【贪心】_数组 输入的所有数字不超过 2020牛客寒假算法基础集训营6.A——配对【贪心】_c++_02


输入描述:

第一行 2 个数字 N,K
接下来两行,每行 N 个正整数,分别表示 A 和 B 中的元素


输出描述:

一行,表示第 K 大的和的最大值


输入

3 2
1 2 3
1 2 3


输出

5


题解

  • 首先组成k对数字的话,肯定是两组数组中各自选出K大个数,然后在这2k个数中匹配
  • 那么假设有2020牛客寒假算法基础集训营6.A——配对【贪心】_c++_03
  • 那么第四大的数,也就是说,在所有组合中,想要最小的数最大,那么肯定是首位组合。
  • 也就是2020牛客寒假算法基础集训营6.A——配对【贪心】_数组_04
  • 那么代码就很好写了,sort下,找一遍即可

AC-Code

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;

int a[maxn], b[maxn];
int main() {
int n, k; while (cin >> n >> k) {
for (int i = 0; i < n; ++i)
cin >> a[i];
for (int i = 0; i < n; ++i)
cin >> b[i];
sort(a, a + n);
sort(b, b + n);
int ans = 2e8;
for (int i = 0; i < k; ++i)
ans = min(ans, a[n - k + i] + b[n - i- 1]);
cout << ans << endl;
}
}