背包九讲
01背包
特点:
每种物品只有一件,选择放/不放
状态转移方程
大循环是每个物品,小循环是价值
优化
j从v到0,可以少一维数组
初始化
初始化要是,没有任何物品可以放的时候,依然合法。
要装满
初始值=负无穷大。
没东西放,就未定义
不一定装满
初始值=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
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?