前言
前面讲解了01背包问题的分析, 其实不难看出, 一个重要的判断该题(大概率)属于01背包问题的隐含条件是: 有N个物体(可以是任何东西, 比如今天的例题中可以是字符串和整数), 每个物体只有选与不选两种情况, 且每个物体只能被选择一次, 以此来满足某种条件
还有, 01背包的状态转移方程就只有两种情况
- 要么选(要满足可选前提, 即背包容量大于当前考虑的第i号元素的重量), 那就减小容积, 再从前i - 1号(子问题嘛!当然去考虑之前的)元素中去考虑
- 要么不选,容积不变, 直接考虑前i - 1号物品
- 注意: 满足可选前提的, 可以选也可以不选(从中挑选最大值), 不满足的只能不选
例题:一和零
题目描述
-
给定一个二进制字符串数组strs和两个整数m和n, 请找出并返回strs的最大子集长度, 该子集中最多有m个0和n个1(例如: strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3)