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

动态规划之二维费用的背包问题解析

以leetcode474题为例引出概念

题目解析: 

给一个m和一个n,m表示最多有多少个0,n表示最多有多少个1,

选出来的子集,记录0和1的个数,在不超过的情况下能选的最大子集,也就是能选多少个元素

从这里,如果观察敏锐的话,可以发现这是一个背包问题,就是选一堆东西,不能超过巴拉巴拉

但这里是有两个背包,也就是m和n,所以这就叫二维背包问题

就是由原来的一个体积限制,到现在的体积和重量限制

m和n就是两个限制

算法原理:

类比我们就可以推出状态表示

 

 通过前面的学习,我们已经可以快速的写出状态表示方程

注意:用a表示str[i]中的0的个数,用b表示1的个数

注意:只有当j>=a&&k>=b时才存在第二种

然后对这两种情况取最大值即可

初始化:

我们发现在填表的时候哪个地方会越界就初始化哪

但是根据我们前面的学习,当j==0和k==0时是不用初始化的,因为会判断

只有当i=0时需要初始化,根据状态表示,i=0表示数组里面有0个子串,不能超过j和k,所以填0

建表的时候就会自动初始化为0,所以不用单独填

 

代码编写: 

相关文章:

  • 数据结构·ST表
  • Git 时光机:修改Commit信息
  • json格式不合法情况下,如何尽量保证数据可用性
  • 音频类网站或者资讯总结
  • 40、C# 数组、链表、哈希、队列、栈数据结构的特点、优点和缺点
  • Python生活手册-NumPy统计:从快递站到咖啡店的数字密码
  • 源码示例:使用SpringBoot+Vue+ElementUI+UniAPP技术组合开发一套小微企业ERP系统
  • Flask 调试的时候进入main函数两次
  • Python教程(四)——数据结构
  • 画立方体软件开发笔记 js three 投影 参数建模 旋转相机 @tarikjabiri/dxf导出dxf
  • 常见音频主控芯片以及相关厂家总结
  • win10-启动django项目时报错
  • Go语言——goflow工作流使用
  • MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
  • 访问者模式(Visitor Pattern)详解
  • excel大表导入数据库
  • RAG 2.0 深入解读
  • OSPF不规则区域划分
  • 从代码学习深度学习 - 语义分割和数据集 PyTorch版
  • 部署RocketMQ
  • 王毅同印度国家安全顾问多瓦尔通电话
  • 外交部发言人就印巴局势升级答记者问
  • 优秀“博主”在上海杨浦购房最高补贴200万元,有何条件?
  • 眉山“笑气”迷局:草莓熊瓶背后的隐秘与危机
  • 我驻苏丹使馆建议在苏中国公民尽快撤离
  • 国家发改委:目前有的核电项目民间资本参股比例已经达到20%