474. 一和零

————————————————————————————————————————————
在计算机界中,我们总是追求用有限的资源获取最大的收益。

现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。

你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。

注意:

给定 0 和 1 的数量都不会超过 100。
给定字符串数组的长度不会超过 600。
示例 1:

输入: Array = {“10”, “0001”, “111001”, “1”, “0”}, m = 5, n = 3
输出: 4
解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出,即 “10”,“0001”,“1”,“0” 。

示例 2:
输入: Array = {“10”, “0”, “1”}, m = 1, n = 1
输出: 2

解释: 你可以拼出 “10”,但之后就没有剩余数字了。更好的选择是拼出 “0” 和 “1” 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ones-and-zeroes
————————————————————————————————————————————
思路:这是一道典型的0/1背包问题,如果不知道什么0/1背包问题,我们一起学习下!简单易懂的0/1背包问题链接:https://blog.csdn.net/qq_38410730/article/details/81667885。

建立一个二维的DP数组,其中dp[i][j]表示有i个0和j个1时能组成的最多字符串的个数,而对于当前遍历到的字符串,我们统计出其中0和1的个数为zeros和ones,然后dp[i - zeros][j - ones]表示当前的i和j减去zeros和ones之前能拼成字符串的个数,那么加上当前的zeros和ones就是当前dp[i][j]可以达到的个数,我们跟其原有数值对比取较大值即可,所以递推式如下:

dp[i][j] = max(dp[i][j], dp[i - zeros][j - ones] + 1);

具体的C++代码如下:

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {int length = strs.size();vector<vector<int>> dp(m+1,vector<int>(n+1));for(int i=0;i<length;i++){int leng = strs[i].size();int zeros = 0;int ones = 0;for(int j=0;j<leng;j++)    //计算字符串中0和1的数量{if(strs[i][j]=='0')zeros++;elseones++;}for(int k=m;k>=zeros;k--)    //使用转化公式{for(int l=n;l>=ones;l--){dp[k][l] = max(dp[k][l],dp[k-zeros][l-ones]+1);}}}return dp[m][n];}
};

leetcode - 474. 一和零相关推荐

  1. LeetCode 474. 一和零(01背包动态规划)

    1. 题目 在计算机界中,我们总是追求用有限的资源获取最大的收益. 现在,假设你分别支配着 m 个 0 和 n 个 1.另外,还有一个仅包含 0 和 1 字符串的数组. 你的任务是使用给定的 m 个 ...

  2. leetcode 474. 一和零(dp)

    给你一个二进制字符串数组 strs 和两个整数 m 和 n . 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 . 如果 x 的所有元素也是 y 的元素,集 ...

  3. LeetCode:1049.最后一块石头的重量II 494.目标和 474.一和零

    1049.最后一块石头的重量II 题目 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的 ...

  4. 代码随想录刷题|LeetCode 1049. 最后一块石头的重量II 494. 目标和 474.一和零

    目录 1049. 最后一块石头的重量 II 思路 最后一块石头的重量|| 494. 目标和 思路 0.求什么 1.确定dp数组的含义 2.递推公式 3.初始化dp数组 4.遍历顺序 目标和 474.一 ...

  5. LeetCode刷题day43|1049. 最后一块石头的重量 II、 494. 目标和、474.一和零

    文章目录 一.1049. 最后一块石头的重量 II 二.494. 目标和 三.474.一和零 一.1049. 最后一块石头的重量 II 这道题其实就与"分割子集"一样,就是先将总和 ...

  6. 474. 一和零 golang动态规划

    474. 一和零 在计算机界中,我们总是追求用有限的资源获取最大的收益. 现在,假设你分别支配着 m 个 0 和 n 个 1.另外,还有一个仅包含 0 和 1 字符串的数组. 你的任务是使用给定的 m ...

  7. LeetCode 474. Ones and Zeroes 动态规划解法+拓展

    问题来源 此题来源于LeetCode 474. Ones and Zeroes 在写这篇之前,我百度了一下这道题,发现已经有很多人写过这个问题了,然而大多数只是为了答题而答题,给出了代码,很少有文字解 ...

  8. day43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

    1049. 最后一块石头的重量 II 1.代码 class Solution { public:int lastStoneWeightII(vector<int>& stones) ...

  9. day36|1049. 最后一块石头的重量 II、494. 目标和、474.一和零

    1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重 ...

最新文章

  1. jQuery 超屏加载
  2. 【大牛疯狂教学】cdhkafka打开的文件描述符临界阈值
  3. 【移动端DL框架】当前主流的移动端深度学习框架一览
  4. 2. getline()和get()
  5. 【转】数学与编程——求余、取模运算及其性质
  6. JS日期格式化(从YYYY-MM-DD到日期类)
  7. python的学习笔记/002-5(2018-5-21)
  8. Kali渗透测试工具库(二)beef--Web浏览器攻击框架
  9. C#调用C++编写的COM DLL
  10. Apache Ant包进行ZIP文件压缩
  11. 国内做得好的进销存软件有哪些啊?
  12. oc引导windows蓝屏_最全的Windows 系统蓝屏死机代码的含义及解决方案
  13. 作为史上最疯狂的科学家,特斯拉提出过哪些惊世骇俗的设想
  14. Android toolchain - develop for Android devices
  15. 怎样在小方框上打对号 小方框内打对勾 word 方框打对勾
  16. linux 博通wifi驱动,博通WiFi驱动
  17. Python之Sqlitespy连接并把Excel内容写到数据库的表中
  18. JDK和JRE区别 --学而不思则罔
  19. Android ImageView 图片拉伸,填满控件
  20. 鼠标停在按钮上 按钮变大

热门文章

  1. Windows XP Embedded with Service Pack 2 开发包光盘 3CD
  2. MySQL迁移到ClickHouse方案
  3. MAC OS 烧录ISO文件到U盘
  4. 容器编排技术 -- 使用kubectl实现应用伸缩
  5. MinIO Docker 快速入门 ​​​​​​​
  6. Docker-Compose快速搭建Oracle-11G系统
  7. OpenJDK-11的新特征
  8. openlayers4 入门开发系列之地图工具栏篇(附源码下载)
  9. npm/yarn修改全局安装路径和缓存路径。。。
  10. Android Kotlin之kotlin-android-extensions使用