贪心算法:纪念品分组问题

【Description】
元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时 间内发完所有纪念品,乐乐希望分组的数目最少。
  你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
  
 【Input】
 第一行包括一个整数w,表示每组纪念品价格之和的上限
 第二行为一个整数n,表示购来的纪念品总件数
 第三行为n个正整数,每个正整数k(k<=w)表示所对应纪念品的价格
 
 【Output】
 输出最少的分组数目
 
 【Sample Input】
 100
 9
 90 20 20 30 50 60 70 80 90
 
 【Sample Output】
 6

题目分析:典型的贪心算法题目,较为简单,只需要将给定的价格排好序,判断最高与最低可否为一组不可以就让最高的位一组,知道遍历完所有的商品

源码如下:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
	int w,n,a[1001],i=0,j=0,sum=0;
	cin>>w;//每组纪念品价格的上限
	cin>>n;//一共多少件纪念品
	for(i;i<n;i++)
		cin>>a[i];
	sort(a,a+n);
	
	while(j<=n)
	{
		if(j == n)
		{
			sum=sum+1;
			break;
		}
		else
		{
			if(a[j]+a[n-1]<=w)
			{
				sum=sum+1;
				j++;
				n--;
			}
			else
			{
				sum=sum+1;
				n--;
			}
		}
	}
	cout<<sum<<endl<<endl;
	
	return 1;
}

猜你喜欢

转载自blog.csdn.net/weixin_43626529/article/details/88594613
今日推荐