动态规划基础(超详细)

动态规划基本概念:

动态规划是一种解决多阶段决策问题的优化方法。它通过将问题分解为一系列子问题,并利用子问题的最优解来构建整体问题的最优解。

动态规划的基本思想是利用子问题的最优解来推导出整体问题的最优解。它通常适用于具有重叠子问题最优子结构性质的问题。

在动态规划中,我们首先定义问题的状态,然后确定状态之间的转移关系。接下来,我们使用递推公式或递归关系来计算每个状态的最优解,并将结果存储起来以便后续使用。最后,我们根据存储的结果找到整体问题的最优解。

动态规划的关键是找到递推公式或递归关系,以及合适的存储方式来避免重复计算。通过合理地定义状态和转移关系,动态规划可以有效地解决许多复杂的优化问题,如最短路径问题、背包问题、序列比对等。

动态规划的基本步骤

动态规划的基本步骤如下:

1.定义问题的状态:首先,需要明确问题的状态是什么。状态是描述问题的关键属性,它们可以是一个或多个变量的组合。状态的选择应该能够包含问题的所有可能情况。

2.确定状态之间的转移关系:接下来,需要确定状态之间的转移关系。也就是说,找到问题的子问题之间的关系,以及如何从一个状态转移到另一个状态。这个转移关系通常可以通过递推公式或递归关系来表示。

3.定义初始条件:在动态规划中,通常需要定义一些初始条件,以便开始计算。这些初始条件是问题中最简单的情况,可以直接计算得到。

4.递推计算最优解:利用定义的状态和转移关系,通过递推计算每个状态的最优解。通常,我们从初始状态开始,逐步计算出更复杂的状态,直到达到最终状态。

5.存储结果:为了避免重复计算,需要将每个状态的最优解存储起来。这样,在计算后续状态时,可以直接使用已经计算过的结果,而不需要重新计算。

6.构造最优解:最后,根据存储的结果,构造出整体问题的最优解。这通常涉及到回溯或迭代的过程,从最终状态开始,根据转移关系逐步回溯到初始状态,得到最优解的具体路径或值。

这里有六个步骤,但实际上我们要真正思考的就只有第 2 2 2与第 3 3 3个步骤而已。

不过需要注意的是,动态规划的实现方式可以有多种,可以使用自顶向下的递归方法,也可以使用自底向上的迭代方法。选择合适的实现方式取决于具体问题的特点和要求。

动态规划例题:

1. 1. 1.【动态规划基础】数字三角形(IOI1994)
2. 2. 2.【动态规划基础】装箱问题(NOIP)
3. 3. 3.【动态规划基础】渡轮问题
4. 4. 4.【动态规划基础】求最大连续子序列和
5. 5. 5.【动态规划基础】求最长不下降序列
6. 6. 6.【动态规划进阶】K上升段

最后

需要注意的是,动态规划并不适用于所有问题,有时候它可能会带来较高的时间和空间复杂度。因此,在使用动态规划之前,我们需要仔细分析问题的特性,确保动态规划是一个合适的解决方法。

猜你喜欢

转载自blog.csdn.net/m0_61360607/article/details/132276006