动态规划:
动态规划就是把大问题拆分成小问题,这些问题可以被重复调用。
举个例子:有n层阶梯,一次只能走一步或者两步,问到达第n层阶梯有几种走法?
我们把每一层阶梯都当成一个点,比如我们现在在第三层阶梯,到第10层阶梯有两种方法,
3->4->5->10,或者是3->5->10,3->10所有的方法是2+x,后面肯定会用到x的,如果暴力的话,是需要重复计算的。
所以从m->10的路径数即为 a[m] = a[m+1] + a[m+2]
斐波那契数列:
用递归的形式为
int feb(int n)
{
if(n == 0)
return 0;
if (n == 1)
return 1;
return feb(n-1)+feb(n-2);
}
这样写的话当计算多组数据时,要进行大量重复计算。
动规:
int feb(int n)
{
if(n == 0)
return 0;
else if (n == 1)
return 1;
else
{
int r[20];
r[0] = 0;
r[1] = 1;
for(int i=2; i<=n; i++)
{
r[i] = r[i-1] + r[i-2];
}
return r[n];
}
}