zoukankan      html  css  js  c++  java
  • 回溯法 | 子集树:01背包

    上文链接:

    9大背包第一弹 | 01背包

     再谈01背包 | 使用【跳跃点集合】代替【求解矩阵】解题


    java代码:

     1 class _01Package{
     2     int[]w;
     3     int[]v;
     4     int len=0;//物品数量
     5     int weightMax=0;//背包最大装载量
     6     int[]x;//当前解
     7     int[]bestX;//最优解
     8     int bestValue=0;
     9     int nowWeight=0;//当前背包中物品的重量
    10     int restWeight=0;//所有物品的剩余重量
    11     _01Package(int[]w,int[]v,int weightMax){
    12         this.w=w;
    13         this.v=v;
    14         this.weightMax=weightMax;
    15         len=w.length;
    16         x=new int[len];
    17         bestX=new int[len];
    18         //初始化restWeight
    19         int i=0;
    20         for(i=0;i<len;i++){
    21             restWeight+=w[i];
    22         }
    23         int a;
    24         a=0;
    25     }
    26 //按照我的思路写的
    27       void BackTrace(int t){
    28         if(t<len){
    29             int a;
    30             a=0;
    31             //遍历左子树
    32             if(nowWeight+w[t]<weightMax){//物品可以放入背包
    33                 restWeight-=w[t];
    34                 nowWeight+=w[t];//更新当前重量
    35                 x[t]=1;
    36                 BackTrace(t+1);
    37                 nowWeight-=w[t];
    38                 restWeight+=w[t];
    39             }
    40             //遍历右子树
    41             if(restWeight+nowWeight>weightMax){//如果剩余的重量全都放入背包,都可以装得满,说明肯定要放,x[t]铁定=1。否的话=0
    42                 x[t]=0;
    43                 BackTrace(t+1);
    44             }
    45             
    46         }else{//遍历到了叶子结点
    47             int i;
    48             int tmpValue=0;
    49             for(i=0;i<len;i++){
    50                 if(x[i]==1) tmpValue+=v[i];
    51             }
    52             if(tmpValue>bestValue){
    53                 bestValue=tmpValue;
    54                 bestX=x.clone();
    55             }
    56         }
    57     }
    58 }
  • 相关阅读:
    Vue小实例
    Bootstrap进度条
    Bootstrap导航栏
    Bootstrap表单
    java date类
    正则表达式(java)规则大全
    正则表达式(java)
    java Stringbuffer类
    java String类
    object类
  • 原文地址:https://www.cnblogs.com/TQCAI/p/7684002.html
Copyright © 2011-2022 走看看