☰
动态规划day1
2026/10/28 18:42:42 网站建设 项目流程

2026.3.29

一、背包问题

动态规划理解方式

dp问题没有模板,重在多刷题,积攒解题经验。

但我们可以用以下思维方式来理解dp问题,帮助我们更好地学习动态规划。

dp可分为状态表示和状态计算两部分。

状态表示

其中,状态表示分为集合和属性两个小部分。对于背包问题来说,集合一般指的是所有选法,且集合需要满足2个条件:1. 从前i个物品中选 2.总体积≤j

也就是说,我们可以用一个二维集合f[i,j],表示所有从前i个物品中选择,且总体积≤j的所有选法,这就是这个问题的状态表示中的集合部分,是一个抽象的概念。

接下来是状态表示的属性部分。这个非常容易理解,我们最终要求一个值,所以f[i,j]集合储存的是集合中的某个属性,可能是最大值(MAX),最小值(MIN),也可能是数量,但总之是这个抽象集合中的一个具体值。对于背包问题而言,通常是最大值。

状态计算

我们求解一个问题,肯定是要得到最终结果的,状态计算的作用就是这个。

那么该如何计算,从而求得一个问题结果?

我们用了集合划分的方法,这是状态计算的核心。

但不同问题的划分方法不一样,这就是为什么dp问题没有一个统一的模板,只能总结出一个大致的理解方式。

那么我们接下来以01背包为例,先讲一下01背包的集合划分是什么样的。

01背包

01背包的状态表示部分,已经在上面作为例子讲述过,不再复述。我们直接来看状态计算:

假设我们要求f[i,j]——从前i个物品中选,且体积≤j的所有选法中,价值最大的选法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询