回溯法:最优装载问题

回溯法对解空间进行深度优先搜索,在一般情况下可用递归方法实现回溯法。
空间树理解:
集装箱n=3
假设装载的集装箱n=3,则空间树可以表示为上图,就是1表示装入该集装箱,0表示不装入该集装箱,最优装载问题就是在这些空间树里,寻找最优子结构。我想看到此处应该不难理解。

具体测试代码:

public class bestLoading {
    static int n;//集装箱数量
    static int []w;//箱子重量数组
    static int c;//第一艘船的载重
    static int cw;//当前的载重量
    static int bestw;//最优载重
    static int r;//剩余集装箱的重量
    public static int maxLoading(int []ww,int cc){
        n=ww.length-1;
        w=ww;
        c=cc;
        cw=0;
        bestw=0;
        r=0;
        for(int i=1;i<=n;i++){
            r+=w[i];
        }
        backtrack(0);
        return bestw;   
    }

    private static void backtrack(int i){
        if(i>n){
            if(cw>bestw) bestw=cw;
            return;
        }
        r-=w[i];
        if(cw+w[i]<=c){
            cw+=w[i];
            backtrack(i+1);
            cw-=w[i];
        }
        if(cw+r>bestw)
            backtrack(i+1);
        r+=w[i];

    }
    public static void main(String []args){
     int []ww={1,7,4,20,9,11};
     int c=26;
     System.out.println(maxLoading(ww,c));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值