写点什么

39 | 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

作者:鲁米
  • 2023-12-14
    北京
  • 本文字数:621 字

    阅读完需:约 2 分钟

现在我们对今天讲到的 0-1 背包问题稍加改造,如果每个物品不仅重量不同,价值也不同。如何在不超过背包重量的情况下,让背包中的总价值最大?


在 0-1 背包问题中,每个物品不仅有重量而且有价值,这就是经典的 0-1 背包问题的变种。在这个问题中,我们除了要考虑物品的重量是否能放进背包,还需要考虑物品的价值,目标是在不超过背包重量的情况下,使得背包中的总价值最大。


以下是 Java 中一个实现该问题的动态规划算法的示例:


public class Knapsack {
public static int knapsack(int[] weights, int[] values, int capacity) { int n = weights.length; int[][] dp = new int[n + 1][capacity + 1];
for (int i = 1; i <= n; i++) { for (int w = 0; w <= capacity; w++) { if (weights[i - 1] <= w) { dp[i][w] = Math.max(dp[i - 1][w], values[i - 1] + dp[i - 1][w - weights[i - 1]]); } else { dp[i][w] = dp[i - 1][w]; } } }
return dp[n][capacity]; }
public static void main(String[] args) { int[] weights = {2, 3, 4, 5}; int[] values = {3, 4, 5, 6}; int capacity = 5;
int maxValue = knapsack(weights, values, capacity); System.out.println("Maximum Value: " + maxValue); }}
复制代码


用户头像

鲁米

关注

生活黑客35 2019-06-11 加入

起点不重要,迭代很重要,就需要保持充分的开放和积累;而信息越充分,结果越可靠,又要求随时调整、不断逼近真相。

评论

发布
暂无评论
39 | 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想_鲁米_InfoQ写作社区