Back Tracking
案例
0-1 背包
private int maxW = Integer.MIN_VALUE; //存储背包中物品总重量的最大值
private int[] weight = {2,2,4,6,3}; // 每个物品的重量
private int n = 5; // 物品个数
private int w = 9; // 背包重量
// cw表示当前已经装进去的物品的重量和;i表示考察到哪个物品了;
// 调用方式:f(0, 0)
public void f(int i, int cw) {
if (cw == w || i == n) { // cw==w表示装满了;i==n表示已经考察完所有的物品
if (cw > maxW) maxW = cw;
return;
}
f(i+1, cw); // 不选择此阶段的物品
if (cw + weight[i] <= w) {// 已经超过可以背包承受的重量的时候,就不要再装了
f(i+1,cw + weight[i]); // 选择此阶段的物品
}
}正则
Last updated
