动态规划一些题目,简单有趣,个人感觉是为了减少不必要的重复问题,提供了一个思路:
如上图一样,使用了常用方法递归法,得到了非常慢的程序,其复杂度到2^n 从下图的分治图可以看出来
这里出现大量的重复的部分,于是采取了后面部分,使得每次都只出现一次,这样便可以快速的计算了
于是代码就出来了:
#include <iostream>
using namespace std;
int dynamicFib(int n)
{
int g = 0, f = 1;
while (0< n--)
{
g = g + f; //g 变为 g+f 如 g = 1+0 = 1
f = g - f; //f 赋值了上次g记录的值 f = 1 -0 =1
}
return g;
}
int main()
{
cout << "fib " << dynamicFib(10)<< endl;
return 0;
}
在 图解算法 中:动态规划解释为:
这里只是简单介绍了动态规划的特点,对应的例题练习在我的leetCode题目栏里,请多多关注我哟。