【千里码】Task25-老王装货


载重上限5t,求最大载重量的方案

虽然知道这是背包问题,对于算法一脸懵逼的我还是只能一个个遍历过去,源代码手贱删了,下面贴个评论区和我差不多思路的代码

public class Answer25 {

    static int good[] = {509, 838, 924, 650, 604, 793, 564, 651, 697, 649, 747, 787, 701, 605, 644};
    static int LIMIT = 5000;

    public static void main(String[] args) {
        int maxWeight = 0;
        String maxMethod = "";

        for (int i = 0; i < 1 << good.length; i++) {
            String method = Integer.toBinaryString(i);

            while (method.length() < good.length) {
                method = "0" + method;
            }
            int sum = 0;
            for (int j = 0; j < method.length(); j++) {
                if (method.charAt(j) == '1') {
                    sum += good[j];
                }
                if (sum > LIMIT) {
                    break;
                }
            }
            if (sum <= LIMIT && sum > maxWeight) {
                maxWeight = sum;
                maxMethod = method;
            }
        }
        String result = "";
        int resultWeight = 0;
        for (int j = 0; j < maxMethod.length(); j++) {
            if (maxMethod.charAt(j) == '1') {
                result += (j + 1) + "-";
                resultWeight += good[j];
            }
        }
        if (result.length() > 0) {
            result = result.substring(0, result.length() - 1);
        }
        System.out.println(result);
        System.out.println(resultWeight);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值