如何解决背包问题:为什么我需要一个二维 DP 矩阵
我遇到了一些经典的背包解决方案,它们总是构建一个二维 DP 数组。 在我看来,我下面的代码解决了经典的背包问题,但只有一个 1-dim DP 阵列。 有人能告诉我我的解决方案在哪些地方不起作用,或者与 2D-DP 版本相比,为什么它的计算效率低下?
可以在此处找到 2D-DP 版本 https://www.geeksforgeeks.org/python-program-for-dynamic-programming-set-10-0-1-knapsack-problem/
示例输入:
weights = [(3,30),(2,20),(1,50),(4,30)]
constraint = 5
我的解决方案:
def knapsack(weights,constraint):
n = len(weights)
#define dp array
dp = [0]*(constraint+1)
#start filling in the array
for k in weights:
for i in range(constraint,k[0]-1,-1):
dp[i] = max(dp[i],dp[i-k[0]]+k[1])
return dp[constraint]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。