二维背包问题

本质: 状态转移方程,即下一时刻状态受上一时刻状态的影响

步骤:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值