背包九讲

01背包

特点:

  • 每种物品只有一件,选择放/不放

状态转移方程

大循环是每个物品,小循环是价值

for i in range(1, n):
  for j in range(ci, v+1):
    dp[i][j] = max(dp[i-1][j], dp[i-1][j-ci])

优化

j从v到0,可以少一维数组

for i in range(1, n):
  for j in range(v, 0, -1):
    dp[j] = max(dp[j], dp[j-ci]+wi)

初始化

初始化要是,没有任何物品可以放的时候,依然合法。

  • 要装满

初始值=负无穷大。

没东西放,就未定义

  • 不一定装满

初始值=0

没东西放,价值为0

leetcode例子

416 分割等和子集

  • n件物品:len(nums)

  • 容量v:sum(nums)//2

  • 放入损耗ci:0

  • 获得价值wi:nums[i]

  • 装满:初始化为false

Runtime: 3032 ms, faster than 5.11% of Python3 online submissions for Partition Equal Subset Sum.

Memory Usage: 16.4 MB, less than 9.09% of Python3 online submissions for Partition Equal Subset Sum.

Runtime: 780 ms, faster than 48.92% of Python3 online submissions for Partition Equal Subset Sum. Memory Usage: 12.7 MB, less than 100.00% of Python3 online submissions for Partition Equal Subset Sum.

322 零钱兑换

每个硬币最多选择一次:

  • n件物品:len(coins)

  • 容量v:amount

  • 放入损耗ci:0

  • 获得价值wi:coins[i]

  • 装满:初始化为-1

https://leetcode-cn.com/problems/coin-change/solution/yong-bei-bao-wen-ti-si-xiang-lai-li-jie-ying-bi-zh/

377 组合总和 Ⅳ

  • n件物品:nums

  • 容量v:len(nums)

  • 放入损耗ci:0

  • 获得价值wi:num

  • 不装满:初始化0

Runtime: 40 ms, faster than 80.63% of Python3 online submissions for Combination Sum IV.

Memory Usage: 13.1 MB, less than 100.00% of Python3 online submissions for Combination Sum IV.

474 一和零

  • n件物品:m个0、n个1

  • 容量v:len(strs)

  • 放入损耗ci:-1

  • 获得价值wi:str

  • 不装满:初始化0

Runtime: 3068 ms, faster than 71.04% of Python3 online submissions for Ones and Zeroes. Memory Usage: 12.8 MB, less than 100.00% of Python3 online submissions for Ones and Zeroes.

  • 139

Runtime: 32 ms, faster than 96.24% of Python3 online submissions for Word Break.

Memory Usage: 12.8 MB, less than 100.00% of Python3 online submissions for Word Break.

494 目标和

  • n件物品:所有正数num

  • 容量v:(sum(nums)+S)//2

  • 放入损耗ci:0

  • 获得价值wi:num

  • 不装满:初始化0

Runtime: 72 ms, faster than 98.96% of Python3 online submissions for Target Sum.

Memory Usage: 12.9 MB, less than 100.00% of Python3 online submissions for Target Sum.

完全背包

Last updated

Was this helpful?