上文链接:
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 }