力扣题解(一和零)

474. 一和零

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。

请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。

如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。

思路:

本题可以看成有两个限制条件的01背包问题,因此可以规定dp[i][j][k]表示前i个子串,0的个数不大于j,1的个数不大于k的情况下的最长长度。则dp[i][j][k]=max(dp[i-1][j][k] ,dp[i-1][j-z[i][k-o[i]]+1),其中z[i]表示第i个子序列中0的个数,o[i]表示第i个子序列中1的个数。

初始化:

j,k均为0的时候,无论i取什么值都存在且仅存在一个不取的情况下让j,k均为0,因此dp[i][0][0]=1.

优化:可以把dp从三维换成二维,因为此处dp[i][][]只和dp[i-1][][]有关,因此可以将第一维去掉,但需要注意此时必须让j,k从大到小变化,这样才能保证dp[j][k]是上一个i所对应的dp。

class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
      int row=strs.size();
      vector<pair<int,int>>strnum(row+1,{0,0});
            vector<vector<int>>dp(m+1,vector<int>(n+1,0));

      for(int i=0;i<row;i++)
      {
         for(auto e:strs[i])
         {
            if(e=='0')
            {
                strnum[i+1].first++;
            }
            else
            strnum[i+1].second++;

         }
          for(int j=m;j>=strnum[i+1].first;j--)
        {
            for(int k=n;k>=strnum[i+1].second;k--)
            {
           
        
             dp[j][k]=max(dp[j][k],dp[j-strnum[i+1].first][k-strnum[i+1].second]+ 1);              
            }
        }
      }

       
      

      return dp[m][n];
    }
};

相关推荐

  1. 题解

    2024-07-21 23:14:03       34 阅读
  2. 474. LeetCode)

    2024-07-21 23:14:03       37 阅读
  3. [题解]860. 柠檬水找

    2024-07-21 23:14:03       39 阅读
  4. 题解(目标

    2024-07-21 23:14:03       25 阅读
  5. [题解]

    2024-07-21 23:14:03       34 阅读
  6. [题解]53. 最大子数组

    2024-07-21 23:14:03       32 阅读
  7. 1-100题解

    2024-07-21 23:14:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 23:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 23:14:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 23:14:03       82 阅读
  4. Python语言-面向对象

    2024-07-21 23:14:03       92 阅读

热门阅读

  1. urllib&requests

    2024-07-21 23:14:03       25 阅读
  2. 接到需求后的开发步骤

    2024-07-21 23:14:03       28 阅读
  3. C#WPF九宫格图片背景实例

    2024-07-21 23:14:03       27 阅读
  4. 算法学习4——动态规划

    2024-07-21 23:14:03       27 阅读
  5. Mysql-多表查询

    2024-07-21 23:14:03       27 阅读
  6. lodash将对象转换成http参数

    2024-07-21 23:14:03       26 阅读
  7. 链表的返回中点问题

    2024-07-21 23:14:03       25 阅读
  8. python实战(输出会动的爱心)*

    2024-07-21 23:14:03       24 阅读
  9. 42、PHP 实现把二叉树打印成多行

    2024-07-21 23:14:03       24 阅读