• leetcode 474.一和零


    题目:

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

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

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

    注意:

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

    分析:

    这是我第一次遇到哦01背包问题,想了挺久不过完全没有思路,看了评论区朋友代码的动态转移方程瞬间就懂了...哈哈哈。

    不进行方法解释,直接给出代码,忘各位朋友自己理解学习。

    代码:

     1 //29ms 80%
     2 class Solution {
     3     public int findMaxForm(String[] strs, int m, int n) {
     4         int[][] dp=new int[m+1][n+1];
     5         for(String s:strs) {
     6             int numz=0,numo=0;
     7             for(char c:s.toCharArray()) {
     8                 if(c=='0')
     9                     numz++;
    10                 else
    11                     numo++;
    12             }
    13             for(int i=m;i>=numz;--i)
    14                 for(int j=n;j>=numo;--j)
    15                     dp[i][j]=Math.max(dp[i][j], dp[i-numz][j-numo]+1);
    16         }
    17         return dp[m][n];
    18     }
    19 }
  • 相关阅读:
    centos,ubuntu下安装zabbix遇到的问题
    代理环境下使用 ADDAPTREPOSITORY 添加 PPA 软件源
    Linux文件系统挂载管理
    Log4j配置详解
    myeclipse快捷键
    Linux用户基础(用户和组)
    C语言I博客作业07
    C语言I博客作业02
    C语言I博客作业08
    C语言I博客作业04
  • 原文地址:https://www.cnblogs.com/CHAHA123/p/10643555.html
Copyright © 2020-2023  润新知