我试图递归地解决这个问题。
假设一个数组:int [] weights = {11,8,7,6,5};
问题:找出容量为20的组合,in这种情况(8,7,5)
。
我的方法:我们的想法是从11开始,将容量更新为20-11 = 9
,然后查看[8,7,6,5]
。不在那里。下一步,我查找8,更新容量为20-8 = 12,并在[7,6,5]
.. (7+5 = 12)
中查找此容量,因此(8,7,5)
是好的,依此类推。这是我到目前为止所尝试的,但我不是那里。
public class KnapSack {
int [] weights = {11,8,7,6,5};
int target = 20;
public static void main(String[] args) {
new KnapSack().go();
}
void go(){
solve(0,target);
}
void solve(int start,int target){
System.out.println("Entering: target= "+target + " index: "+ start);
if(target ==0)
return;
else{
int total = 0;
for(int i=start; i<weights.length; i++){
//Combination worked
if(weights[i]== target){
System.out.println("Reached capacity!");
}
//combination exceeded
else if(weights[i]> target){
continue;
}
total += weights[i];
solve(++start, target-weights[i]);
}
}
}
}