思路:
做了一些贪心的题目,总结出来,对于问题的定义是至关重要的。 该问题是使得最少的船将全部人载走,等价定义是每一个船载的人尽可能的多,也就是使每个船尽可能有两个人配对成功。那么进行一下排序,最大与最小组合就好了。
#include <bits/stdc++.h>
using namespace std;
vector<int> vec;
int main()
{
int n,m;
int num;
cin>>n>>m;
for ( int i=0; i<n; i++ )
scanf("%d",&num),vec.push_back( num ) ;
int ans = 0;
sort( vec.begin(),vec.end() );
int l=0,r=vec.size()-1;
while ( l<=r ) {
++ans;
if ( vec[r]+vec[l]<=m ) {
r--;
l++;
} else {
r--;
}
}
cout<<ans<<endl;
return 0;
}