纪念品分组
题目描述:
元旦快到了,学校的同学们让乐乐负责跨年晚会的纪念品分发工作。为了使参加聚会的同学们获得的纪念品价值相对均衡,他须将购买的纪念品按价值分组,每组纪念品最多只能包含两件,且每组纪念品价值的总和不能超过给定的价格。为了确保在最短的时间内分发所有的纪念品,乐乐需要让纪念品分出的组数尽量少。
你的任务是编写一个程序,找到最少的组数并输出。
输入格式:
第一行包含一个整数w,即每组纪念品价格总和的上限。
第二行是一个整数n,代表购买的纪念品总数。
第3~n+2行每行包含一个正整数pi(5<=pi<=w),表示对应纪念品的价格。
输出格式:
一个整数,即最小组数。
样例输入:
10
3
5 7 1
样本输出:
2
数据范围:
50% 的数据满足:1<=n<=15
100% 的数据满足:1<=n<=30000, 80<=w<=200
我的代码:
#include<bits/stdc++.h>
using namespace std;
int w,n,a[100001];
int main()
{
cin>>w>>n;
for(int k=1;k<=n;k++)
{
cin>>a[k];
}
sort(a+1,a+1+n);
int i=0,j=n-1;
for(;i<j;)
{
if(a[i]+a[j]<=w)
{
i++;
j--;
}
else
{
j--;
}
}
printf("%d",(n-(i*2)+i));
return 0;
}
望高人赐教!