根据题目意思,进行一趟升序排序,然后每次都将最小的跟最大的组合,如果超出上限,让最大的单独一组,即右边指针左移,如果满足的话左指针右移,右指针左移;
#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;
}
京公网安备 11010502036488号