【leetcode题解-动态规划之0-1背包】474. 一和零(python版本+详细表格计算)

这篇博客介绍了如何用动态规划解决LeetCode 474题——一和零的问题。这是一个0-1背包问题,需要在给定的m个0和n个1的限制下,从字符串数组中选取子集,使得子集的最大长度最大化。博客详细解释了动态规划的五步法,并通过Python代码展示了具体的实现过程。
摘要由CSDN通过智能技术生成

474. 一和零

本题为0-1背包,因为物品(strs中每一个字符串)只能使用一次,但是背包有两个:m,n分别表示最多装m个0和n个1的两个背包

即:weight维度为2(对应0,1的个数),每个字符串value为1,背包分别为容量为m和n的0背包和1背包

dp五部曲:

1. dp[i][j]:最多有i个0和j个1的字符串数组最大子集长度

2. 递推公式:dp[i][j]=max(dp[i][j],dp[i-sum0][j-sum1]+1)

sum0,sum1:当前字符串k所包含的0,1个数

dp[i][j]:不选择字符串k,则从0~k中进行选择的结果等于从0~k-1中选择的dp[i][j]

dp[i][j]:选择字符串k,则从0~k中进行选择的结果等于从0~k-1中选择的dp[i-sum0][j-sum1](dp两个维度都减去当前字符串k的0,1个数)+1(当前字符串)

3. 初始化

dp全部初始化为0

4. 遍历方向

从右下角开始,从右到左,从下到上(保证不覆盖)

5. 举例推导

以输入:["10","0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别熬夜了您

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值