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

代码随想录算法训练营第三十五天-动态规划-01背包(一维)

  • 这种解法是把之前的二维解法压缩成一维解法
    • 二维数组的解法就是不断把上一层向数组经过运算加载到下一层的过程
    • 那么如果只在当前层不断修改数据,可以将数组减少为一维
    • 不断修正一维数组值,而且是以类似滚动一样的方式变化值,所以也叫滚动数组
  • 动规五部曲
    • dp数组(一维)含义:容量为i背包所能容纳的最大价值
    • 递推公式:dp[i] = std::max(dp[i], dp[i - wight[j]] + cost[j])
      • 注意这其中的ij的含义不同
    • dp数组初始化:
      • 如果考虑没有物品作为第一行数据,所有一维值都是0
      • 如果考虑第一个物品作为第一行数据,数据在这个背包容量之后都为第一个物品的价值,而之前容量都是0
        • 因为递推公式中要跟自身比较取最大值,所以初始化时,只要是非负的最小值即可,即为0
    • 遍历顺序
      • 要倒序遍历这个一维数组,这其中的原因是由于递推公式决定的
      • 递推公式中有dp[i - weight[j]],这其中wight[j]肯定是大于等于0的,也就是要到下标小于i数组中前面找出数据来更新i处的数据
      • 如果从前向后更新,就相当于修改了修改了二维数组中前一行数组的值,这样结果就会不准确,会导致同一物品可能会多次加入到背包中
      • 与二维数组不同的是,在双重遍历时,外层遍历一定是物品,内层遍历背包容量,这是因为如果这两个遍历颠倒过来,会导致内部循环结束后,一维数组的内容只剩下价值最大的一个物品,其它物品不能组合加入进去,而二维则可以随意颠倒内外循环
    • 打印
    • 汇总

http://www.kler.cn/a/508028.html

相关文章:

  • 【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)
  • PCL 新增自定义点类型【2025最新版】
  • 32单片机综合应用案例——物联网(IoT)环境监测站(四)(内附详细代码讲解!!!)
  • 将图像输入批次扁平化为CNN
  • Android 12.0 息屏休眠后立即启动屏保功能实现
  • 使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级的封装(包括调用Json文件))
  • 敏感信息数据搜集系统全英文
  • 【MySQL】表操作
  • C语言的语法糖
  • IvorySQL 4.2 发布
  • 25/1/17 嵌入式笔记 STM32F103
  • 利用.NET版Word处理控件Aspose.Words,使用 C# 在 Word 中创建图表
  • MySQL SQL优化技巧与原理
  • 【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三
  • 如何实现圆形头像效果
  • 基于TypeScript封装 `axios` 请求工具详解
  • openharmony测试子系统
  • 【React】函数组件底层渲染机制
  • 【2024年华为OD机试】 (B卷,200分)- 二叉树中序遍历(Java JS PythonC/C++)
  • GIFT ICA 下载记录
  • Flink的优化技巧
  • 力扣-数据结构-21【算法学习day.92】
  • 如何选择适合特定项目需求的人工智能学习框架?
  • python-44-嵌入式数据库SQLite和DuckDB
  • SQL-杂记1
  • C++11特性简述