回溯法:最优装载问题

大家好,我是连人。本期讲述回溯法中的最优装载问题。

以简单的语言说,就是给定两艘船,要求一批货物分别装入。

这道问题采用“先尽可能以最大载重装一艘船,再以剩下的货物装另一艘”。

这样,我们就将问题简化为了0-1背包问题。采用回溯法构建解空间,之后遍历即可。思路很简单,代码的注释我也写的很详细了。

def traceback(depth):
    global n, goods, ship, best_arrange, now_arrange, best_load, now_load, remain

    if depth >= n:                 # 遍历到叶节点,取较大值
        if now_load > best_load:
            best_arrange = now_arrange
            best_load = now_load
        return

    remain -= goods[depth]         # 将当前处理货物从剩余中扣去

    if now_load + goods[depth] <= ship:    # 如果加了这件货物没超最大载重
        now_arrange[depth] = 
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值