```cpp
// luogu-judger-enable-o2
#include<iostream>
#include<algorithm>
using namespace std;
int j[66666],ans;
int main(){
int w,n;
cin>>w>>n;
for(int i=0;i<n;i++){
cin>>j[i];
}
sort(j,j+n);
int z=0,y=n-1;
while(z<=y){
if(j[z]+j[y]<=w){
ans++;
z++;
y--;
}
else{
y--;
ans++;
}
}
cout<<ans<<endl;
return 0;
}
```
by JAMERES86 @ 2018-07-12 09:57:54
还有,你的代码只能得20分啊
by JAMERES86 @ 2018-07-12 10:01:04
###### 而且,既然你都把数组排序了,为什么还要把所有情况都枚举啊,直接让目前最大和最小的分组岂不更好
by JAMERES86 @ 2018-07-12 10:07:11
```cpp
Z是当前最便宜的纪念品编号,Y是最贵的
while程序段的解释是:
当有尚未分组的纪念品时{
如果最便宜与最贵的纪念品能够分为一组{
组数加一;
将最便宜与最贵纪念品移走分组;
}如果不能分组{
组数加一;
将最贵纪念品移走分组;
}
}
```
by JAMERES86 @ 2018-07-12 10:16:22
大佬%%%谢谢qwq
by 爱晚亭哦 @ 2018-07-12 11:06:30