动态规划算法求解0/1背包问题代码
时间: 2023-09-17 10:15:04 浏览: 84
这是关于01背包问题的动态规划算法。采用C++语言完成的,代码间有注释.rar
以下是动态规划算法求解0/1背包问题的Python代码:
```python
def knapsack(weights, values, capacity):
n = len(weights)
# 初始化二维数组,其中dp[i][j]表示前i件物品放入一个容量为j的背包可以获得的最大价值
dp = [[0] * (capacity + 1) for _ in range(n + 1)]
# 从第1件物品开始遍历
for i in range(1, n + 1):
# 遍历容量从0到背包容量
for j in range(capacity + 1):
if weights[i - 1] > j:
# 如果当前物品的重量大于当前背包容量,则无法装入,直接使用上一次的最优解
dp[i][j] = dp[i - 1][j]
else:
# 否则,当前物品可以装入背包,需要比较装入和不装入的价值大小,取最大值
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weights[i - 1]] + values[i - 1])
return dp[n][capacity]
```
其中,`weights`和`values`分别表示物品的重量和价值,`capacity`表示背包的容量,函数返回背包能够获得的最大价值。
阅读全文