代码随想录——一和零(Leetcode474)

题目链接

0-1背包

java 复制代码
class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        // 本题m,n为背包两个维度
        // dp[i][j]:最多右i个0和j个1的strs的最大子集大小
        int[][] dp = new int[m + 1][n + 1];
        // 遍历strs中字符串
        for(String str : strs){
            int num0 = 0;
            int num1 = 0;
            for(int i = 0; i < str.length(); i++){
                if(str.charAt(i) == '0'){
                    num0++;
                }
                if(str.charAt(i) == '1'){
                    num1++;
                }
            }
             for(int i = m; i >= num0; i--){
                for(int j = n; j >= num1; j--){
                    dp[i][j] = Math.max(dp[i][j], dp[i - num0][j - num1] + 1);
                }
             }
        }
        return dp[m][n];
    }
}

背包递推公式:dp[i][j] = max(dp[i][j], dp[i - num0][j - num1] + 1)

相关推荐
w_zero_one22 分钟前
递归算法(一)
java·开发语言·算法
圣保罗的大教堂37 分钟前
leetcode 3736. 最小操作次数使数组元素相等 III 简单
leetcode
SL_staff1 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华1 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊1 小时前
LeetCode1881~1990题目解析
java·leetcode
风影同志783242 小时前
20 个比特能装下多少行情?——实测拆解 Kronos 的 K 线分词器
算法
十碗饭吃不饱2 小时前
后端运维:网络联通、进程查询、Java服务启动脚本
java·运维·网络
T_Wizard2 小时前
后端转 AI 应用开发,我先把这 12 个名词理清了:一张图看懂架构、RAG、Tool Calling 与 MCP
java·ai编程
杨航 AI2 小时前
JEV的用法
java·前端·数据库
灿飞2 小时前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin