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

算法专题(三)01背包问题理论

零、动规五部曲

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

题目:

一、dp的含义

dp[i][j]表示第0个到第i-1个的物品中放入容量为j的背包中的最大价值

二、确定递推公式

分为两个部分:不放物品i和放物品i

1、不放物品i

dp[i][j]=dp[i-1][j]

就是说容量没变化(从dp[i-1][j-1]到dp[i-1][j]),但是只放入了0到i-1中的物品,最后赋值给dp[i][j]

2、放物品i

dp[i][j]=dp[i-1][j-weight[i]]+value[i]

就是说硬塞进物品i,容量得减去第i个物品的重量,剩下的也是0到i-1中的物品,然后再加上i的价值,最后赋值给dp[i][j]

3、最终递推公式:

dp[i][j]=Max(dp[i-1][j],dp[i][j]=dp[i-1][j-weight[i]]+value[i])

三、dp数组如何初始化

因为是二维数组,我们从递推公式也可以看出,[i][j]只和[i][j-1]、[i-1][j-weight[i]]有关,意思就是数据只会从左上来,所以我们只考虑第一行和第一列

数组:

第一列背包重量为j=0,所以价值都是0

第一行从能放入物品0开始都是物品0的重量

因此初始化完成

四、确定遍历顺序

        for (int i = 1; i < n; i++) {for (int j = 0; j <= bagweight; j++) {if (j < weight[i]) {dp[i][j] = dp[i - 1][j];} else {dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);}}}

这道题因为只和左上有关系,所以先背包还是先物品都可以

五、举例推导dp数组

自行推导

资源来源:代码随想录

http://www.dtcms.com/a/409967.html

相关文章:

  • pycharm 运行不报错,但是调试报错,
  • 原型模式了解
  • 基于hive和mapreduce的地铁数据分析及可视化_hive作为数据库
  • 使用虚幻引擎(UE5)制作开箱爆金币功能
  • 网站在线考试答题系统怎么做泰兴网页定制
  • 展示型商城订单网站建设网页设计网站方案
  • 【MySQL数据库】InnoDB实现MVCC(多版本并发控制)底层原理
  • 自己做网站推广关键词网站开发和合同
  • 【Qt开发】输入类控件(二)-> QTextEdit
  • 攻克音频顽疾:基于QCC3095/QCC5181/QCC3040实现全域无冲击声的实战分享
  • 视频融合平台EasyCVR构筑智慧交通可视化管理与智能决策中枢
  • 从特征到应用:用 dlib+OpenCV 实现实时疲劳检测(基于眼睛纵横比)
  • 【买机器人,上BFT】北京大学联合项目 论文解读 | H2R:一种用于机器人视频预训练的人机数据增强技术
  • 音频库管理在数字媒体中的应用探索
  • BLE配网协议 - 分包、组包和重传功能指南
  • MediaHuman YouTube to MP3 多语便携版:高效音频提取工具
  • Java 数组的定义与使用
  • 自建站有哪些站点wordpress前台压缩图片
  • R语言中的获取函数与替换函数
  • 微前端中iframe集成方式与使用微前端框架方式对比
  • 【NOI】在信奥赛中 什么是函数交互题?
  • 电脑上怎么做网站963中华室内设计网
  • Python调用优云智算安装的ComfyUI服务器
  • ACA云原生工程师认证知识点脑图
  • 用 Flink 打造事件驱动流式应用从 DataStream 到 ProcessFunction
  • MySQL学习笔记05:MySQL 索引原理与优化实战指南
  • 【提示工程】Ch2(续)-提示技术(Prompt Technique)
  • 嵌入式软件知识点汇总(day2)
  • QT中QStackedWidget控件功能及应用
  • 网络爬虫(上)