← 首页 / 背包问题九讲 · 动态规划的思考艺术 待审核 10 页

背包问题九讲 · 动态规划的思考艺术

一类被反复讲解近二十年的 dynamic programming 入门题——把若干带「费用 C」和「价值 W」的物品放入容量 V 的背包,求最大价值。九讲从最朴素的 01 背包(每件至多选一次)出发,逐步增加约束、变换问法:无限选、有上限、多类混合、双重费用、分组互斥、物品依赖……最后抽象成「物品即函数 h(v)」与「换聚合算子即换问法」两条主线。

每页都可调整容量 / 物品参数、单步执行,观察 DP 表逐格填出、读取的父节点与正在写入的格子高亮、代码逐行点亮,最后回溯出究竟选了哪几件落入背包。脉络一条线:状态 → 转移方程 → 循环方向 → 组合 / 求和 → 回溯

基础三讲:状态、方程、循环方向

进阶四讲:混搭、升维、分组、依赖

收束两讲:统一抽象与问法变化

动手体验 · 应用 demo

它真实跑在哪里

资源分配 / 预算优化:有限预算下挑选投资组合、云配额下排布任务、广告预算下选择投放位——都是「容量 + 费用 + 价值」的背包骨架。 电商优惠叠加:满减券 / 折扣券 / 限领券如何组合最省?多张门槛累加占用额度、减免即价值,正是 01 / 完全 / 多重 / 分组背包(本系列的应用案例都取自这里)。 切割与装箱:钢材 / 木板下料、货物装箱(bin packing 的近亲)、虚拟机装宿主机,本质都在做带容量约束的价值最大化。 竞赛与面试:OI / ACM、LeetCode 高频题(零钱兑换、分割等和子集、目标和……)几乎都能归到九讲里的某一讲。

原版出处