状态定义、转移方程、边界条件三步法。用几个经典例题,帮你彻底告别被 DP 支配的恐惧。
动态规划(Dynamic Programming)把一个大问题分解成互相重叠的子问题,并 记录已解决的子问题结果,避免重复计算。
核心思想:最优子结构 + 重叠子问题,借助状态转移方程递推求解。
dp[i] 表示什么含义。每次可爬 1 或 2 阶,爬到 n 阶有几种方法。
状态 dp[i] = dp[i-1] + dp[i-2],边界 dp[1]=1, dp[2]=2。这就是斐波那契。
状态 dp[i] 表示以第 i 个元素结尾的最长递增子序列长度。转移时需要遍历前面所有更小的元素。
在容量限制下选物品使价值最大。状态是"前 i 件物品 + 容量 j",即二维 dp。