【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;
}