目录
概念
步骤
数组转化
遍历顺序
代码编写
----
概念
W:背包最大总重量
Y:当前最大总重量限制(遍历时会变动:0~W)
N:物品的总数量
w_j:物品 j 的重量(j=0~N)
p_j:物品...由于存在0行和0列,因此长度需要额外+1。
重量长度 = 背包总重+1。
物品长度 = 物品总数+1。
根据递推公式,当前 dp[i][j] 由上方或左上角的内容,推算而来。...最后结果只需要返回dp右下角的值即可。
遍历顺序
两层for循环:
第一层(外层):遍历物品
第二层(内层):遍历背包
备注:对于当前的二维数组,顺序可颠倒。...# 遍历背包
for j in range(1, W+1):
# 放不下的情况
if wi > j:...: print(i)
# 输出结果
print(dp[-1][-1])
[0, 0, 0, 0, 0]
[0, 0, 4, 4, 4]
[0, 2, 4, 6, 6]
[