题意:中文题面,不需要解释了。
思路:将纪念品件数从小到大排序,小的和大的一组,如果超过给定的上限,则大的单独一组。
AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e4+10;
int a[maxn];
int main(void){
    int w;
    cin>>w;
    int n;
    cin>>n;
    for(int i = 1; i <= n; i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n);
    int l = 1;
    int r = n;
    int cnt = 0;
    while(l<=r){
        if((a[l]+a[r])<=w){
            cnt++;
            l++;
            r--;
        }
        else{
            r--;
            cnt++;
        }
    }
    cout<<cnt<<endl;
    return 0;
}