public class HuiSuBag {
// 回溯算法实现
private static int maxW = Integer.MIN_VALUE; // 结果放到 maxW 中
private int[] weight = {2, 2, 4, 6, 3}; // 物品重量
private int w = 9; // 背包承受的最大重量
public static void main(String[] args) {
new HuiSuBag().f(0,0);
System.out.println(maxW);
}
public void f(int i, int cw) { // 调用 f(0, 0)
if (cw == w || i == weight.length) { // cw==w 表示装满了,i==weight.length 表示物品都考察完了
if (cw > maxW) {
maxW = cw;
}
return;
}
f(i + 1, cw); // 选择不装第 i 个物品
if (weight[i] + cw <= w) {
f(i + 1, cw + weight[i]);
}
}
public int dp() {
int[][] dp = new int[weight.length][w + 1];
dp[0][0] = 1;
dp[0][weight[0]] = 1;
for (int i = 1; i < weight.length; i++) {
for (int j = 0; j < w + 1; j++) {
if (dp[i - 1][j] == 1) {
dp[i][j] = 1;
if (j + weight[i] <= w) {
dp[i][j + weight[i]] = 1;
}
}
}
}
int result = 0;
for (int i = w; i >= 0; i--) {
if (dp[weight.length - 1][i] == 1) {
result = Math.max(result, i);
}
}
return result;
}
}
23.01背包之递归回溯&动态规划
最新推荐文章于 2024-07-18 20:50:08 发布
本文介绍了一种使用回溯算法和动态规划来解决背包问题的方法。通过具体的代码示例,展示了如何在给定的物品重量和背包最大承重下,找到能够放入背包的最大价值。首先,通过回溯算法遍历所有可能的组合,然后采用动态规划优化求解过程,提高了算法效率。

1万+

被折叠的 条评论
为什么被折叠?



