知识点:贪心
难度:4
这个贪心其实还是很简单的推一下式子就出来了,我们假设已经有k个位置用了跳过陷阱的机会,然后把任意下标设出来,得出这个位置伤害减免,然后求和,就可以得到一些常数,以及为了让这个伤害减免,我们的排序依据,从大到小排序取前面的k个数就行了
注意数据要开long long
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int a[N];
int main() {
int T;
cin >> T;
while (T--) {
int n;
long long k;
cin >> n >> k;
long long tot = 0, rec = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", a + i);
tot += (long long) a[i];
a[i] += i;
}
sort(a + 1, a + n + 1);
reverse(a + 1, a + n + 1);
for (int i = 1; i <= k; i++) {
rec += (long long) a[i];
}
rec += (long long) k * (k - n) - (k + 1) * k / 2;
cout << tot - rec << '\n';
}
return 0;
}