day43 动态规划part5 代码随想录算法训练营 474. 一和零 【粗略理解】

题目:474. 一和零

我的感悟:

  • 有点难想,加油、111
  • 本题没敲,有机会敲一遍

理解难点:

  • 两个维度的背包

听课笔记:

代码示例:

class Solution:
    def findMaxForm(self, strs: List[str], m: int, n: int) -> int:
        dp = [[0] * (n + 1) for _ in range(m + 1)]  # 创建二维动态规划数组,初始化为0
        # 遍历物品
        for s in strs:
            ones = s.count('1')  # 统计字符串中1的个数
            zeros = s.count('0')  # 统计字符串中0的个数
            # 遍历背包容量且从后向前遍历
            for i in range(m, zeros - 1, -1):
                for j in range(n, ones - 1, -1):
                    dp[i][j] = max(dp[i][j], dp[i - zeros][j - ones] + 1)  # 状态转移方程
        return dp[m][n]

通过截图:

扩展写法:

资料:

 474.一和零  

通过这道题目,大家先粗略了解, 01背包,完全背包,多重背包的区别,不过不用细扣,因为后面 对于 完全背包,多重背包 还有单独讲解。

视频讲解:https://www.bilibili.com/video/BV1rW4y1x7ZQ

https://programmercarl.com/0474.%E4%B8%80%E5%92%8C%E9%9B%B6.html

posted @ 2024-02-27 21:45  o蹲蹲o  阅读(4)  评论(0编辑  收藏  举报