当前位置: 首页 > news >正文

动态规划— 一和零

class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp = new int[m+1][n+1];//dp[i][j]表示i个0和j个1时的最大子集int oneNum = 0, zeroNum = 0;for(String str : strs){oneNum = 0;zeroNum = 0;for(char c : str.toCharArray()){if(c == '0'){zeroNum++;}else{oneNum++;}}//dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1for(int i = m; i>= zeroNum; i--){for(int j = n; j>= oneNum; j--){dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);}}}return dp[m][n];}
}

确定dp数组以及下标的含义

       dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]

确定递推公式

      递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);

dp数组初始化

       dp[0] 初始为0 

确定遍历顺序

          遍历背包的for循环,  for循环倒序遍历

复杂度分析

  • 时间复杂度: O(kmn),k 为strs的长度
  • 空间复杂度: O(mn)

http://www.lryc.cn/news/476642.html

相关文章:

  • 【Android】SharedPreferences存储中没有 Double 类型数据存储的解决方式
  • ffmpeg:视频字幕嵌入(GPU加速)
  • DCN网络进行新冠肺炎影像分类
  • C++中的继承——第二篇
  • 动态规划探索篇
  • js中多let与var
  • 基于人工智能的搜索和推荐系统
  • 冷钱包与热钱包的差异 | 加密货币存储的安全方案
  • 014:无人机遥控器操作
  • PCL 点云高度归一化
  • 【Effective C++】阅读笔记4
  • 浅谈mysql【8.0】链接字符串
  • BERT,RoBERTa,Ernie的理解
  • 获取 Wind 数据并进行简单的择时分析
  • 小檗碱的酵母代谢工程生物合成-文献精读78
  • 文件指针和写入操作
  • 跨越科技与文化的桥梁——ROSCon China 2024 即将盛大开幕
  • springboot+shiro 权限管理
  • PureMVC在Unity中的使用(含下载链接)
  • 25国考照片处理器使用流程图解❗
  • 一位纯理科生,跨界自学中医,自行组方治好胃病、颈椎病与高血脂症,并在最权威的中国中医药出版社出版壹本专业中医图书!
  • 运动控制 双轮差速模型轨迹规划
  • 使用 Sortable.js 库 实现 Vue3 elementPlus 的 el-table 拖拽排序
  • MySQL索引相关介绍及优化(未完...)
  • 【AI+教育】一些记录@2024.11.04
  • 三维测量与建模笔记 - 2.2 射影几何
  • 论文速读:简化目标检测的无源域适应-有效的自我训练策略和性能洞察(ECCV2024)
  • ros与mqtt相互转换
  • Golang | Leetcode Golang题解之第522题最长特殊序列II
  • 安卓开发之数据库的创建与删除