思路:
做了一些貪心的題目,總結出來,對於問題的定義是至關重要的。 該問題是使得最少的船將全部人載走,等價定義是每一個船載的人儘可能的多,也就是使每個船儘可能有兩個人配對成功。那麼進行一下排序,最大與最小組合就好了。
#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;
}