题目描述
书店搞促销优惠活动:“卖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行,每行一个整数Ci表示一本书的价格。1≤Ci≤100000。
输出格式
一个整数,最少付款是多少。
输入输出样例
输入样例
4
3
2
3
2
输出样例
8
题解
明显的贪心,每次都尽可能让最便宜的书更贵即可。
#include<iostream> #include<algorithm> using namespace std; int n,a[100005],sum; bool cmp(int a,int b) { return a>b; } 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;) { if(n-i<2) { sum+=a[i]; i++; } else { sum+=a[i]+a[i+1]; i+=3; } } cout<<sum; return 0; }
参考程序
原文地址:https://www.cnblogs.com/kcn999/p/10463791.html
时间: 2024-11-02 23:52:24