1.注意点
和分治算法不同,动态规划算法中,分解的每一步都和前一步、下一步有联系
2.代码实现
public class Bag {
public static void main(String[] args) {
int[] weight = {1, 4, 3};
int[] value = {1500, 3000, 2000};
int MAX_Weight = 4;
int num = value.length;
int[][] v = new int[num + 1][MAX_Weight + 1];
int[][] path = new int[num + 1][MAX_Weight + 1];
for (int i = 0; i < v[0].length; i++) {
v[0][i] = 0;
}
for (int i = 0; i < v.length; i++) {
v[i][0] = 0;
}
for (int i = 1; i < v.length; i++) {
for (int j = 1; j < v[0].length; j++) {
if (weight[i - 1] > j) {
v[i][j] = v[i - 1][j];
} else {
if (v[i - 1][j] < value[i - 1] + v[i - 1][j - weight[i - 1]]) {
v[i][j] = value[i - 1] + v[i - 1][j - weight[i - 1]];
path[i][j] = 1;
} else {
v[i][j] = v[i - 1][j];
}
}
}
}
for (int i = 0; i < v.length; i++) {
for (int j = 0; j < v[0].length; j++) {
System.out.print(v[i][j] + "\t\t");
}
System.out.println();
System.out.println();
}
int i = path.length - 1;
int j = path[0].length - 1;
while (i > 0 && j > 0) {
if (path[i][j] == 1) {
System.out.println("第" + i + "个物品放入背包");
j -= weight[i - 1];
}
i--;
}
}