简单背包Java版本的递归解决方案

时间:2015-05-06 14:58:37

标签: java recursion knapsack-problem

我试图递归地解决这个问题。

假设一个数组: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]);
        }
    }
}

}

0 个答案:

没有答案