luogu1094:纪念品分组:排序+双向游标

题目连接:该题是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;
} 

猜你喜欢

转载自blog.csdn.net/liusu201601/article/details/88786209
今日推荐