动态规划day1
2026.3.29一、背包问题动态规划理解方式dp问题没有模板重在多刷题积攒解题经验。但我们可以用以下思维方式来理解dp问题帮助我们更好地学习动态规划。dp可分为状态表示和状态计算两部分。状态表示其中状态表示分为集合和属性两个小部分。对于背包问题来说集合一般指的是所有选法且集合需要满足2个条件1. 从前i个物品中选 2.总体积≤j也就是说我们可以用一个二维集合f[ij]表示所有从前i个物品中选择且总体积≤j的所有选法这就是这个问题的状态表示中的集合部分是一个抽象的概念。接下来是状态表示的属性部分。这个非常容易理解我们最终要求一个值所以f[ij]集合储存的是集合中的某个属性可能是最大值MAX最小值MIN也可能是数量但总之是这个抽象集合中的一个具体值。对于背包问题而言通常是最大值。状态计算我们求解一个问题肯定是要得到最终结果的状态计算的作用就是这个。那么该如何计算从而求得一个问题结果我们用了集合划分的方法这是状态计算的核心。但不同问题的划分方法不一样这就是为什么dp问题没有一个统一的模板只能总结出一个大致的理解方式。那么我们接下来以01背包为例先讲一下01背包的集合划分是什么样的。01背包01背包的状态表示部分已经在上面作为例子讲述过不再复述。我们直接来看状态计算假设我们要求f[ij]——从前i个物品中选且体积≤j的所有选法中价值最大的选法。