题目描述:
思路:
本题考察了前缀和算法,先将输入的数据进行排序,并计算前缀和存入另一个数组中,发现最终结果仅和取了多少颗最小的和取了多少颗最大的有关,代码如下
满分代码:
#include <iostream>
#include <algorithm> //sort所在头文件,也可用万能头(作者用的VScode不能使用万能头)
int a[200005];
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++) {
a[i] += a[i - 1];
}
int sum = 0;
int p = 0; //记录拿的最小的的个数
while (k>=0) {
sum = max(sum, a[n - k] - a[p]);
k--;
p += 2;
}
cout << sum << endl;
}
}