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

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

以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,所以不用单独填

 

代码编写: 

http://www.xdnf.cn/news/5367.html

相关文章:

  • CDGP历次主观题真题回忆
  • 深入浅出之STL源码分析4_类模版
  • Bitacora:基因组组件中基因家族识别和注释的综合工具
  • PTA:jmu-ds-拓扑排序
  • 安装:Kali2025+Docker
  • 【Redis】string 字符串
  • RT-Thread 深入系列 Part 4:组件包管理与软件框架
  • CarConfig自动化测试思路(CCP)
  • MiInsertVad函数分析之nt!MMVAD结构
  • make和makefile的使用,以及写一个简单的进度条程序
  • Yocto是如何使用$D目录来构建文件系统的?
  • SAM详解3.2(关于2和3的题)
  • 从客厅到星空 | 解锁雷克赛恩 Cyber Pro1 投影仪的多元场景应用与选购指南
  • Baklib革新企业数字化内容管理
  • idea批量引入缺失的和去除无用的类包
  • cmake source_group 分组功能辅助函数
  • 焊接与热切割作业理论考试难度分析
  • 未来通信中的大型人工智能模型:基础、应用与挑战的全面综述
  • 《P2415 集合求和》
  • Windows 操作系统 - BAT 脚本引入(BAT 脚本初识、窗口标题与颜色、输出文本)
  • 历史数据分析——北部湾港
  • 洗衣机电机驱动电路
  • M0基础篇之ADC
  • 【llama-factory】Lora微调和DPO训练
  • 论文分享➲ arXiv2025 | TTRL: Test-Time Reinforcement Learning
  • JavaSE核心知识点02面向对象编程02-06(泛型)
  • 多环境开发
  • Makefile中 链接库,同一个库的静态库与动态库都链接了,生效的是哪个库
  • 【RT-Thread Studio】W25Q128配置
  • unity通过transform找子物体只能找子级