给定一个包含 N 个整数的数组。请从数组中选出 M 组有序数对。
每组有序数对由数组中的两个元素组成,且每组有序数对只能用一次。请编程计算出,在给定的数组中,选出的 M 组有序数对的和的最大值是多少。
本题中的有序数对,指的是符合如下两个条件其中之一数对:
从 N 个数中,选出两个不同位置的整数。比如第 i 个数 A_i 和第 j 个数 A_j(i \neq j),则 A_i, A_j 和 A_j, A_i 为两组不同的有序数对。
从 N 个数中,选出同一个位置的整数 2 次,组成一组有序数对。比如第 i 个数 A_i, A_i 即构成一组有序数对。
第一行包含两个整数 N 和 M,分别表示数组中元素的个数和需要选择的有序数对数量。
第二行包含 N 个整数 A_1, A_2, ..., A_N,表示数组中的每个元素的值。
输出一个整数,表示选出的 M 个有序数对的和的最大值。
5 3 34 33 10 14 19
202
9 14 110 24 21 34 1 3 5 5 3
1837
9 73 64141 40773 79105 16076 67597 52981 5828 66249 75177
8128170
有 5 个数:34, 33, 10, 14, 19,需要选 3 个有序数对。
一种可能的方案:
对于 15\% 的数据,满足所有的 A_i 全部相同。
对于 50\% 的数据,满足 1 \le N \le 100。
对于 100\% 的数据,满足 1 ≤ N ≤ 10^5,1 ≤ M ≤ N^2,1 ≤ A_i ≤ 10^5。
月赛