我们要输出最少的分组策略,我们可以贪心,每次都选最大的和最小的,如果刚好满足<=v,就分好,如果大于,说明只能让最大的一个一组
过程可以用双指针实现
我们来实现一下代码
#include <iostream>
#include <algorithm>
using namespace std;
int n;
const int N = 3e4+10;
int a[N];
int v;
int main()
{
cin >> v >> n;
for(int i = 1;i<=n;i++)
{
cin >> a[i];
}
sort(a+1,a+1+n);
int ret = 0;
int l=1,r=n;
while(l<=r)
{
if(a[l]+a[r] <= v)
{
l++,r--;
}
else
{
r--;
}
ret++;
}
cout << ret << endl;
return 0;
}