39 | 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
现在我们对今天讲到的 0-1 背包问题稍加改造,如果每个物品不仅重量不同,价值也不同。如何在不超过背包重量的情况下,让背包中的总价值最大?
在 0-1 背包问题中,每个物品不仅有重量而且有价值,这就是经典的 0-1 背包问题的变种。在这个问题中,我们除了要考虑物品的重量是否能放进背包,还需要考虑物品的价值,目标是在不超过背包重量的情况下,使得背包中的总价值最大。
以下是 Java 中一个实现该问题的动态规划算法的示例:
复制代码
本文字数: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 加入
起点不重要,迭代很重要,就需要保持充分的开放和积累;而信息越充分,结果越可靠,又要求随时调整、不断逼近真相。
促进软件开发及相关领域知识与创新的传播
评论