适合采用DP方法的最优化问题中的两个要素:
1.最优子结构和重叠子结构问题;
2.备忘录方法用来充分利用重叠子问题性质
用DP求解优化问题的第一步是描述最优解的结构:若问题的一个最优解中包含了子问题的最优解,则该问题具有最优子结构(该情况下贪心算法也适用。贪心算法与DP的一个显著区别是贪心算法一自顶向下的方式使用最优子结构的,贪心算法先做当时看起来最优的选择,然后在求解一个结果子问题)。
找寻最优子结构遵循的共同模式:
1.问题的一个解可以是做一个选择。做这种选择会得到一个或者多个有待解决 的子问题
2.假设对一个给定的问题,已知的是一个可以可以导致最优解的选择。不必关心如何确定这个选择,尽管假定他是已知的。
3.在已知这个选择后,要确定那些子问题会随之发生,以及如何最好的描述所得到的子问题空间。
4.利用一种剪贴技术,来证明在问题的一个最优解中,使用的子问题的解本身也必须是最优的。通过假设每一个子问题的解都不是最优解,然后到处矛盾,即可做到这一点。特别的,通过剪除非最优的子问题解再贴上最优解,就证明了可以得到原问题的一个更好的解,因此,这与假设已经得到一个最优解相矛盾。如果有多于一个的子问题的话,由于它们通常非常类似,所以只要对其中一个子问题的剪贴处理略加修改,即可很容易的用于其他子问题。
最优子结构在问题域中以两种方式变化:
1.有多少个子问题被使用在原问题的一个最优解中
2.在决定一个最优解中使用哪些子问题时有多少个选择。