根据题目意思,进行一趟升序排序,然后每次都将最小的跟最大的组合,如果超出上限,让最大的单独一组,即右边指针左移,如果满足的话左指针右移,右指针左移;

#include <bits/stdc++.h>
#define MAX 100005
#define ll long long
using namespace std;
int main()
{
    ll w,n,a[MAX],i,j,ans=0;
    cin>>w>>n;
    for(i=0 ; i<n ; i++)
        cin>>a[i];
    sort(a,a+n);
    i=0 ; j=n-1;
    while(i<=j)
    {
        if(a[i]+a[j]<=w)
        {
            ans++;
            i++;
            j--;
        }

        else
        {
            ans++;
            j--;
        }

    }
    cout<<ans<<endl;
    return 0;
}