首先动态规划问题是一种解决问题的思路,相当求解一个问题,你有很多种可行解,但是你要从所有可行解当中找到一个合适的最优可行解。
那么动态规划问题在解决一个大的比较复杂的问题时,往往会把一个大的问题拆分成若干个子问题,甚至子问题的子问题来求解(类似于分治的思想),而这些子问题并非全部互相独立的,而是你把所有子问题的求解结果都算作是一次计算,最后把这些子问题的解都输出来得到原始问题的解。每个子问题就好比数学上三角函数的一个周期内图像的描述,每个子问题是有共通性的,如果把一个很小周期内所以可能的细节全部考虑到,其他周期都是在重复这个周期内的所有细节描述,仅仅只是换了一个递推的参数而已,那么这个动态规划问题的通项小问题模板你就已经找到了,问题就可以解决了。
举个例子
拆分问题的思想,用计算机领域我们常见的方法来理解,可以是一个递归的过程或者迭代的过程,相当于对问题进行不断拆分求解的过程(有点禁止套娃那味了)。不同的是自顶向下求解问题我们称之为递归(记忆存储Memoization),而自底向上求问题叫迭代(表格填充法Tabulation),它有点类似与我们现在的迭代开发了。