动态规划(Dynamic Programming)是一种用于解决具有重叠子问题和最优子结构性质的问题的算法设计技术。它通常用于优化问题,如最优化问题和计数问题,其基本思想是将原问题分解为子问题,并通过保存子问题的解以避免重复计算来加速求解过程。6 [3 k2 a4 x- c' U
动态规划的主要特点包括:: d U, S! J, g- X2 T" m/ i
1 Y) ?$ ]- d K/ B0 U/ { k' Q1.最优子结构:问题的最优解可以通过其子问题的最优解来构造。换句话说,问题的全局最优解可以通过局部最优解组合而成。* W5 w( K+ a: a
2.重叠子问题:问题的解可能会多次重复计算相同的子问题。动态规划通过保存已解决的子问题的解来避免重复计算,从而提高效率。, R7 f, r) J' P) `4 U9 ?