贪心,从小到大排序之后,从第一个人开始,每次都找和自己体重相差最大并且还能上船的
例如 6 6
1 2 3 4 5 6
肯定要 1 5配 2 4配
这样才能把重的最大利用掉
可以定义一个index用于遍历的索引
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<cstdio>
using namespace std;
int main(){
long long n,m;
scanf("%lld%lld",&n,&m);
long long a[10001];
for(int i=0;i<n;i++) scanf("%lld",&a[i]);
sort(a,a+n);
long long sum=0;
int index=n-1;
for(int i=0;i<n;i++){
for(int j=index;j>i;j--){
if(a[i]+a[j]<=m){
sum++;
index=j-1;
break;
}
}
}
sum+=n-2*sum;
cout<<sum;
return 0;
}