本质: 状态转移方程,即下一时刻状态受上一时刻状态的影响
步骤:
1、建立目标域 (即,多个背包的可能性组合)
2、判断当前时刻的状态值
例题:
输入: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3
输出: 4
解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出,即 "10","0001","1","0" 。
解题思路:
1. 可用0和1的个数可以看成不同容量的背包(二维)
dp[i][j] i 表示可用0的个数, j 表示可用的1的个数
2. 对应每一个01串, 做的事情:
对于可以放得下的背包 ①不放,则查看当前背包容纳物品的数量 ②放,则 1(数量+1) + 剩余背包空间的能容纳物品的数量(该值受上一时刻的影响)
3. 状态转移方程:
dp[i][j] = max(dp[i][j], 1 + dp[ i-item_count0 ][ j-item_count1 ])
当前时刻背包容纳数量 = ( 未变化前背包容纳数量 , 变化后的背包容纳数量 )中的最大值
class Solution:
def findMaxForm(self, strs: List[str], m: int, n