#ECNU-2531[乘船]

题意

有n个人,每个人的重量为ci,每条船的最大承重为k,每条船最多乘坐两个人。在保证全部人上船的前提下,最少要多少条船

解题思路:

先排序,从最大的开始上船,若船还有空间就与最小的重量进行比较,若空间大于或等于最小的重量,那么这条船还可以装,若剩余的空间小于最小的重量,意味着这个最大的就单独一条船。

乘船

#include<bits/stdc++.h>
using namespace std;
int a[2010];
int n,l,r,k;
int main( )
{
    int t;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        for(int i=0; i<n; i++)
        {
            cin>>a[i];
        }
        l=0;
        r=n-1;
        sort(a,a+n);
        int ans=0;
        while(r>=l)//假如n是单数的话,或许最后一个单独一条船
        {
            int d=k-a[r];
            ans++;
            if(d>=a[l])//若空间有多,那么最小的重量就向右移
            {
                l++;
            }
            r--;//最大重量一直左移
        }
        cout<<ans<<endl;
    }

    return 0;
}
posted @ 2020-06-10 22:00  私の目を見て  阅读(213)  评论(0)    收藏  举报