【输入形式】
【输出形式】
【样例输入1】
4
3
2
3
2
【样例输出1】
8
【样例输入2】
6
6
4
5
5
5
5
【样例输出2】
21
解题思路:
第一次碰到这题还是一头雾水,之后经某位大佬指点了一下瞬间就明白了。他每次的规则是三个去掉一个三个中最小的,所以如果我们需要使得花费的钱最少我们只需要将所有个数进行一次降序排序。第一次减去第3个数,然后每次加3进行循环遍历即可。
举例1
排序完为 3 3 2/ 2
没减之前花的钱为 3+3+2+2=10
减去能省的2 结果为10-2=8
到这里大家应该就能看懂了核心思想就是排个序然后每次减第三个数就好了,这里为了方便就用sort吧,附上代码。
#include <bits/stdc++.h>
using namespace std;
int a[100005],n;
long long s;
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
s+=a[i];
}
sort(a,a+n,greater<int>());
for(int i=2;i<n;i+=3)
s-=a[i];
printf("%lld",s);
return 0;
}