部件集

时间:2015-05-06 10:24:06

标签: java recursion knapsack-problem

我在java中有背包问题的递归解决方案,这是我的代码:

public class OptimalIncome{
final static int length[] = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
final static int price[] = new int[] {1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
public static int totalLength = 9;

public static int bestCut(int i, int totalLength){
    if(i < 0){
        return 0;
    }
    else if(length[i] > totalLength){
        return bestCut(i - 1, totalLength);
    }
    else{
        return Math.max(bestCut(i - 1, totalLength), bestCut(i - 1, totalLength - length[i]) + price[i]);
    }
}

public static void main(String[] args){
    System.out.println("Given total rod length : " + totalLength);
    System.out.println("Maximum income         : " + bestCut(price.length-1, totalLength));
    System.out.println("Smaller part sets      : ");
}
}

它工作得很好,你可以看到我想打印一组选择(较小的部分)。我怎样才能做到这一点? 感谢

1 个答案:

答案 0 :(得分:2)

我们走了:

import java.util.ArrayList; import java.util.List;

Select Case UCase$(Left$(subject, 3))

    Case "RE:", "AW:":
        '// is reply
    Case Else
        If subject Like "*XXX*YYY*" Then
            MsgBox "Hello"
        End If

End Select

我们只需要做一个反递归和检查,你是否得到了构造输出的最佳解决方案。

虽然我认为您可以在解决方案中添加一些备忘录,以便它足够快。 希望它有所帮助。