动态规划通常应用于最优化问题。
使用动态规划的两个前提:最优子结构和重叠子问题。
若问题满足这两个前提,可以考虑使用动态规划解决。一般步骤为:
1. 描述最优解的结构
2. 递归定义最优值
3. 自底向上计算最优值
4.构造一个最优解
其中每一步都是下一步的基础,难度也依次降低。
这里我想说的是如何递归定义原问题和子问题。
-------------------------------------------------------------------------
子问题是原问题的一部分,可以考虑子问题是否是
原问题的前缀
原问题的后缀
原问题的某一部分(一般是连续的某一部分)
子问题的形式可能存在多种,一种形式不适合编程实现时往往意味着有简化版本的定义形式。
将子问题扩展到原问题时可以为原问题添加适当的环境条件。
递归定义子问题和最优值十分重要,一个好定义使得编程实现十分容易。