考虑使用贪心。
排序后,从 a[n-1] 开始贪心 $K$ 个数据即可。
算法
贪心
时间复杂度
$O(nlogn)$
因为里面有一个排序。
C++ 代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=2e5+10;
ll a[MAXN];
int main() {
//freopen("1.in", "r", stdin);
//freopen("1.out", "w", stdout);
int T;
scanf("%d", &T);
while (T--) {
int n,K;
scanf("%d%d", &n, &K);
for (int i=1; i<=n; i++) {
scanf("%lld", &a[i]);
}
sort(a+1, a+n+1);
if (a[1]==a[n] && a[1]==0) {
printf("0\n");
continue;
}
ll ans=a[n];
for (int i=n-1, j=1; i>=1 && j<=K; i--, j++) {
ans+=a[i];
}
printf("%lld\n", ans);
}
return 0;
}