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

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

相关推荐
Y.9991 小时前
电脑黑屏只有鼠标能动
学习
智学AI1 小时前
AI博主写作素材管理方法分享:资料归集、笔记关联与文档归档
人工智能·笔记
架构师伯子明2 小时前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习
叼烟扛炮2 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
weixin_448119942 小时前
Datawhale Jev Cookbook 202610 笔记5
笔记
程序员梅雨2 小时前
【从零开始学习数据仓库 | 第二篇】: 拉链表 & 数仓分层
大数据·数据仓库·学习
一木 之林2 小时前
Dify学习笔记 04 · 检索底座:Embedding、Rerank与向量数据库(第46-54集)
笔记·学习·embedding·dify
ljt27249606612 小时前
Python笔记(十一)--Numpy(一)
笔记·python·numpy
芯思路3 小时前
STM32开发学习笔记之十【AI部署】
笔记·stm32·学习
憧憬成为java架构高手的小白3 小时前
langgraph4j学习
学习