算法思想
其实就是一种带备忘录的递归。其实就是一个大的问题拆分成许多的小问题,再读小问题进行重叠运算,这里和分治法最大的不同再于拆分小问题而直接做重叠运算,分治法是逐个解决再进行合并。
一条公式为 dp = max(dpj,dpj + dpi),dpj为上一个j个小问题叠加的答案,dpi为当前小问题的答案,
再由dpj + dpi 计算得到最终答案。
比如说最经典的问题斐波那契数组计算,f(n) 计算出来,再计算f(n + 1) 只需要把记录下来的f(n)和f(n-1)进行累加,即可得到f(n+1)的答案。
编写代码
int Fbnci(int n)
{
//建立数学模型,斐波那契数列的关系为a1=1,a2=2,an = an-1 + an - 2
int a1 = 1,a2 = 1,an = a1 + a2;
for(int i = 2;i < n;i++)
{
an = a1 + a2;
a1 = a2;
a2 = an;
}
return an;
}