day42 动态规划part4 代码随想录算法训练营 46. 携带研究材料- 一维数组写法
题目:46. 携带研究材料
我的感悟:
- 一维是二维的压缩
理解难点:
- 倒序遍历j
- 因为每轮的数字是由左上决定的。
- 遍历的时候,从右侧遍历,是不会影响左侧的。
- weight[i] 是本轮的重量,遍历到这里就结束了,为了python取前不取后,要多减1位,
- 为weight[i] -1
听课笔记:
代码示例:
def bag_problem(weight, value, bagWeight):
# 初始化
dp = [0] * (bagWeight + 1)
for i in range(len(weight)): # 遍历物品
# print(f"物品{i}",weight[i]-1 ,) # weight = [1, 3, 4]
# 注意: weight[i]-1 是最小值的意思
for j in range(bagWeight, weight[i]-1, -1): # 遍历背包容量
dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
print(f"本来dp是{dp}")
return dp[bagWeight]
# m, n = map(int, input().split())
# weight = list(map(int, input().split()))
# value = list(map(int, input().split()))
# res = bag_problem(weight, value, n)
# print(res)
weight = [1, 3, 4]
value = [15, 20, 30]
bagweight = 4
print(bag_problem(weight, value, bagweight))
通过截图:
扩展写法:
网友评论:
资料:
01背包问题 一维