之前一直做一本通上面的题,最近改做洛古了。hhh
喜欢就点个赞呗!(逃
思路:
读入之后先用sort排序,然后用两个指针一起向中间走,每次选择都尽可能的让当前状态下最大的和最小的分在一组,如果不行就最大的单独分一组,这样贪心下来就是最少分的组了。
#include<iostream>
#include<algorithm>
using namespace std;
int a[30000],i,j;
int main()
{
int m,n;
int Minimum_number_of_groups=0;
cin>>m>>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]<=m)
{
i++;
j--;
Minimum_number_of_groups++;
}
else
{
j--;
Minimum_number_of_groups++;
}
}
cout<<Minimum_number_of_groups;
return 0;
}