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

一、动态规划 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

相关推荐
知产xiao_xin几秒前
商标权的内容和限制
经验分享·笔记·知识产权
陈年老古董16 分钟前
Hive 函数学习笔记(上):单行函数与炸裂函数
hive·笔记·学习
喜欢打篮球的普通人1 小时前
MiniMind 学习笔记(十八):速通强化学习——从 MDP 到 PPO 的概念与算法地图
笔记·深度学习·学习
志尊宝2 小时前
Vue3 零基础每日笔记(076):防抖节流的正确使用——搜索框、按钮防重复提交、滚动监听
javascript·vue.js·笔记
老王爱玩车2 小时前
动态内存管理
c语言·开发语言·学习·面试
海绵宝宝转agent2 小时前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
yi0112 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
yi0112 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
北风toto3 小时前
数据库笔记:Armstrong 公理系统与集合论的深度辨析
数据库·笔记
EasyBr指纹浏览器3 小时前
我的开源项目:小红书笔记归档,把来源和缺项一起留下
笔记·小红书·开源工具·素材管理·内容归档