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背包问题 一维 

https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-2.html

视频讲解:https://www.bilibili.com/video/BV1BU4y177kY

posted @ 2024-02-26 20:12  o蹲蹲o  阅读(3)  评论(0编辑  收藏  举报