题目连接:该题是luogu试炼场的2-6:T5
题目大意:
给n个物品的价钱,要求如下:
1 每组最多2个物品;
2 每组的单价尽可能大,但不能超过m;
解题思路:
1 第一反应还是排序;
2 让当前最小的和最大的合成一组,如果和超过了m,则最大的自己成组;
3 注意处理最后一组。
上代码:
//luogu1208:混合牛奶:排序+贪心
//解题思路:
//1 排序
//2 左右各抽一个数相加,符合条件就组队,不符合条件的,右边的单独成队;
//3 注意处理交汇的点
#include<cstdio>
#include<algorithm>
using namespace std;
int n,w,a[300010],ans=0;
int main()
{
scanf("%d %d",&w,&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
int x=1,y=n;
while(x<y)
{
if(a[x]+a[y]<=w)
{
x++;y--;ans++;
}
else if(a[x]+a[y]>w)
{
y--;ans++;
}
if(x==y) { ans++;y--;}
}
printf("%d",ans);
return 0;
}