【学习笔记】动态规划+背包问题

一、动态规划 DP 基础概念

  1. DP 核心思想

动态规划:把大问题拆成重叠的子问题,保存子问题答案避免重复计算,不需要重复递归。

三大核心要素:DP数组定义、递推公式、初始化,再加遍历顺序、结果取值。

  1. DP 数组定义

一句话:dpi 代表第 i 个状态下,我们想要的答案。

dp 数组含义必须先写清楚,定义错了,后面全错。

示例:一维 dp,dpi = 考虑前 i 个物品时能得到的最大价值。

  1. 递推公式(状态转移方程)

子问题之间的推导关系,把旧状态推导出新状态,DP 最关键部分。

比如 01 背包:dpj = max(dpj, dpj - weight\[i] + valuei);

含义:不选当前物品,就是dpj;选当前物品,容量减少 weight i,价值加上 value i,取两者最

大值。

  1. DP 四步解题模板

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

2、确定递推公式(状态转移方程)

3、dp 数组如何初始化(初始值,边界条件)

4、确定遍历顺序(一维 01 背包:物品正序,容量倒序!)

二、背包入门(01 背包,最基础)

01 背包:每个物品只能选 1 次或者不选,不能重复选。

完全背包:物品可以选无限次(后面再学,入门先学 01 背包)

01 背包重点

物品:weight \[\] 重量,value \[\] 价值;背包总容量 bagSize

dp 一维数组定义:dpj:背包容量为 j 时,能装的最大价值

递推公式:dpj = max(dpj, dpj - w + v)

遍历顺序:容量 j 从后往前倒序遍历!

倒序:保证每个物品只用一次(01 背包)

如果正序,物品会被重复选取,变成完全背包

初始化:dp 数组全部初始化为 0。容量 0,价值就是 0。

01 背包选择:两种情况

1、 不拿当前物品:dp j 不变

2、拿当前物品:背包腾出 w i 空间,加上当前物品价值 v i

相关推荐
Hhy_11071 小时前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
传奇开心果编程1 小时前
【Flutter入门练中学】第1课:从零开始
学习·flutter·ui
智者知已应修善业11 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程
小弥儿12 小时前
GitHub今日热榜 | 2026-09-18:腾讯双项目上榜
学习·开源
知识分享小能手14 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
m4Rk_14 小时前
【论文阅读】Agent 记忆机制(74):CompassMem——从相似度检索走向事件图上的记忆导航
论文阅读·人工智能·学习·开源·github
小李不想当小白14 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
2601_9499506316 小时前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
2601_9653842616 小时前
口腔黏膜清洁的工程化路径:从表面形貌表征到清洁策略匹配
经验分享·笔记