P1094 [NOIP2007 普及组] 纪念品分组 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <iostream>
#include <algorithm>
using namespace std ;
const int N = 3e4+10 ;
int n , w , v[N] , check[N] ;
int main ()
{
scanf ("%d%d",&w,&n);
for (int i = 1;i <= n;i++)
scanf ("%d",&v[i]) ;
sort(v+1,v+n+1) ;
int l = 1 , r = n ;
int sum = 0 ;
while (l < r)
{
if (v[l] + v[r] <= w)
{
sum++ ;
check[l] = check[r] = 1 ;
l++ , r-- ;
}
else if (v[l] + v[r] > w)
r-- ;
}
for (int i = 1;i <= n;i++)
{
if (!check[i])
sum++ ;
}
cout << sum << endl ;
return 0 ;
}