可以使用动态规划算法来解决这个问题。具体思路是建立一个一维数组dp[i],表示背包容量为i时所能获得的最大价值。然后遍历物品列表和背包容量,对于每个物品,如果它的重量小于等于当前背包容量,就将其价值加入dp[i]中,同时更新dp[i]的值为dp[i - weight] + value与dp[i]的较大值。
代码示例:
def knapsackWithDuplicates(W, wt, val): n = len(wt) dp = [0] * (W + 1) for i in range(W + 1): for j in range(n): if wt[j] <= i: dp[i] = max(dp[i], dp[i - wt[j]] + val[j]) return dp[W]
上一篇:背包问题变种:建议适合地板的瓷砖
下一篇:背包问题的变体