📚 动态规划

动态规划和递归或者分治没有根本上的区别(关键看有无最优的子结构)

  • 共性:找到重复子问题
  • 差异性:最优子结构、中途可以淘汰次优解

💻 代码模板

  • 一维路径

斐波那契数列:通过递归,先计算 f(0), f(1), f(2),然后计算 f(3), f(4),依次类推,直到计算出 f(n)。

1
f(n) = f(n-1) + f(n-2)
  • 二维路径

从左上角走到右下角,每次只能向右或向下走,问有多少种走法。
走到 f(m, n),只能从 f(m-1, n)或 f(m, n-1)走过来。

1
f(i, j) = f(i+1, j) + f(i, j+1)

🏫 经典题目

路径计数

最长公共子序列

三角形最小路径和

最大子序列和

打家劫舍