题目描述:
书店稿促销优惠活动:“卖 3 本免费 1 本”。即如果你买 3 本书,价格最便宜的那本书就不收钱。如果买很多书, 不同分组优惠的价格可能不同。比如,买 7 本书,价格分别是:10,3,2,4,6,4,9。 如果分组是: (10,3,2),(4,6,4)和(9),第一组免费价格 2,第二组免费价格 4,第三组不能免费。
现在,你买了 N 本书,请恰当分组(每组 1 本到 3 本),使得花费最少?
输入格式
第一行包含 1 个整数 N, 1≤N≤100000。
下面 N 个整数,每行 1 个整数 Ci 表示一本书的价格。 1≤ Ci ≤ 10000。
输出格式
一个整数,最少付款是多少。
输入/输出例子1
输入:
4
3 2 3 2
输出:
8
输入/输出例子2
输入:
6
6 4 5 5 5 5
输出:
21
样例解释
无
分析:
从题目得知,每分三组的话才可以免一次费,那就可以用n逐个%3,只要!=0,就开始累加
for(int i=1;i<=n;i++)
if(i%3!=0) s+=a[i];
代码:
#include <bits/stdc++.h>
using namespace std;
bool cmp(int x,int y)
{
return x>y;
}
int n,a[100001],s=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
if(i%3!=0) s+=a[i];
cout<<s;
return 0;
}