直接来看这道题:
给一个二进制字符数组strs和m、n,请找出strs中最大子集的大小,该子集中最多包含m个0和n个1。
这题应该说比较明显的给出了两个背包大小的维度n和m,而物品个数就是strs中的子集个数。显然直接按照01背包的做法添加一个物品然后根据之前的dp状态计算即可。
其中dpijk代表strs长度为i时,包含j个0和k个1的最大子集大小,决策则是拿或者不拿这两种;
和之前的01背包一样,这个也可以优化掉i这个维度。
明显多维背包和传统的01背包十分相似,基本思路仍然是遍历物品——遍历容量——遍历决策,难点只在于对状态的抽象。