问题 E: 买玩具
题目描述
玩具店有个活动,买2个送1个:3个玩具只要付较贵的2个玩具的钱就可以了。举个例子:
10 3 2 4 6 4 9,如果这样组合(10, 3, 2), (4, 6, 4), (9),就在第一个括号中省下2元,第二个括号中省下4元,但第三个括号不能省了,因为只有一个玩具。
小星星是个懂事的孩子,他想尽可能的为家里省钱,他能成功吗?
(注意:玩具组合的数量可以是1或者2或者3 )
输入
输入的第一行一个整数N(1 ≤N ≤ 100000),表示玩具的数量。
50%的数据中N≤ 2000
接下来的N行,每行包含一个整数Ci(1 ≤Ci≤ 100000), 表示每个玩具的价格。
输出
一个数,表示最终要为这些玩具付出的最小价格。
样例输入
4 3 2 3 2
样例输出
8
提示
【样例 1 解释】
分组(3,2,2)(3)
一定要养成好的习惯,关注好数据类型能不能存下。
100000*100000会超过int的范围导致答案错误。警醒,兄弟!!!!!!
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int a[100010];
vector<int>v;
int main()
{
int n;long long sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
sort(a+1,a+n+1,greater<int>());
long long cut=0;
for(int i=1;i<=n;i++)
{
if(i%3==0)cut+=a[i];
}
cout<<sum-cut;
}