动态规划[dp]是解决问题很经典的算法。基本的思想,就是将一个问题转化为若干个子问题,当某个子问题的解已经算出来的时候,就将其记忆存储起来,以便于下次解决同一个子问题时就可以直接给出答案,这样的一个好处就是可以避免重复计算。动态规划适用于有重叠子问题和最优子结构性质的问题,通常能够达到把指数级的时间复杂度下降为多项式时间复杂度的效果。
需要注意的几个点:
- 需要一个辅助空间,记录子问题的解。而且这种辅助空间一般是三维以下的数组;
- 需要明确各个子问题之间的关系,以避免重复计算;
- 一般对数组、字符串等有些难度的问题的解决非常有效;