题意:中文题面,不需要解释了。
思路:将纪念品件数从小到大排序,小的和大的一组,如果超过给定的上限,则大的单独一组。
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; }