题目表述
链接:https://ac.nowcoder.com/acm/contest/5600/A
来源:牛客网
题解
本题有一定的贪心思想,遵循局部最优选择。
首先,我定义血量大于零的怪兽为活着的怪兽(鄙人没什么文化,想不出更贴切的词了,见谅),血量等于零的怪兽为死了的怪兽。
当活着的怪兽数量大于x时,每消耗x的能量,会造成大于x的伤害,即每一点能量值可以造成大于1的伤害,所以选择践踏。
而当活着的怪兽数量小于x时,则选择冲撞。
代码
//LMY
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=10e5;
ll a[N];
int main() {
ll x,i,n,result=0;
scanf("%lld%lld",&n,&x);
for(i=0; i<n; i++) {
scanf("%lld",&a[i]);
}
sort(a,a+n);
if(x>=n) {
for(i=0; i<n; i++) {
result=result+a[i];
}
}
if(x<n) {
ll temp,sum=0;
temp=(n-x)*x;
for(i=n-x; i<n; i++) {
sum=sum+a[i]-(n-x);
}
result=sum+temp;
}
printf("%lld\n",result);
return 0;
}