题目连接:https://www.51nod.com/contest/problem.html#!problemId=1432
思路:对于最重的有两种情况
(1)最重的人和最轻的人的体重和小于等于船的载重,那么两人可以同程一船,乘船人数减小为n-2人;
(2)最重的人和最轻的人的体重和大于船的载重,那么最重的人独自乘坐一船,乘船人数减小为n-1人。
其余人可以按以上方法递归。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
ll a[10005];
int vis[10005];
int main()
{
scanf("%lld %lld",&n,&m);
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
}
sort(a,a+n);
int ans=0;
for(int i=0,j=n-1;i<=j;){
if(a[i]+a[j]<=m)
{
ans++;
i++;j--;
}
else{
ans++;
j--;
}
}
printf("%d\n",ans);
return 0;
}