动态规划
文章目录
动态规划(Dynamic Programming, DP)是一种用来解决一类 最优化问题的算法思想。
简单来说,动态规划是将一个复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。动态规划会把每个求解过的子问题的解记录下来,这样当下一次碰到同样的子问题时,就可以直接使用之前记录的结果,而不是重复计算。
一般可以使用递归或者递推的方法的写法来实现动态规划,其中递归写法又称为 记忆化搜索。
递归写法(自顶向下)
动态规划记录子问题,避免下次遇到相同的子问题时重复计算。
以斐波那契数列为例,F0 = 1,F1 = 2,Fn = Fn-1 + Fn-2 。
递归写法
int F(int n) {
if(n == 0 || n == 1) return 1;
else return F(n-1