简单乘船问题之贪心(java)

本文介绍了一种解决乘船问题的高效算法。该问题设定为:有n个人,每个人有不同的重量,每艘船的最大载重量为C,且每船最多载两人。目标是使用最少的船只装载所有人。通过排序并匹配最轻与最重的人同船,实现船只使用的最优化。

问题描述:

有n个人,第i个人重量为wi。每艘船的最大载重量均为C,且最多只能乘两个人。用最少的船装载所有人。

思路分析:

首先将每个人的重量数组进行排序,然后安排瘦的和胖的坐在一艘船上(使用开始指针和结束指针即可),使船只使用最大化。若排序后的w[0]>C,则直接返回人数即为所需船只的数量。

具体见代码注释:

import java.util.Arrays;
import java.util.Scanner;
public class Ccwt {
    //乘船问题
    //有n个人,第i个人重量为wi。每艘船的最大载重量均为C,
    // 且最多只能乘两个人。用最少的船装载所有人。
    public  static int solve(int []w,int C)
    {
        int n=w.length;//人数
        int st=0;//定义开始和结束指针
        int et=w.length-1;
        int out=0;//要返回的船只的个数
        while(n>0)
        {
            if (w[st]>=C)//若最小的人的重量大于C
            {
                out=w.length;
                  break;
            }
            if (w[st]+w[et]<=C)//若开始和结束的重量小于C
            {
                out++;
                n-=2;
                st++;
                et--;
            }
            else//若开始和结束的重量大于C
            {
                out++;
                et--;
                n--;
            }
        }
        return out;
    }
    public static void main(String[] args) {
        Scanner a=new Scanner(System.in);
        int n=a.nextInt();//输入人数n
        int []w=new int[n];//输入每个人的重量
        for (int i = 0; i <n ; i++) {
            w[i]=a.nextInt();
        }
        Arrays.sort(w);//对体重进行排序
        int C=a.nextInt();//输入最大载重量
        int out=solve(w,C);
        System.out.println(out);
    }
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lianggege88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值