【程序基础】动态规划

算法思想

其实就是一种带备忘录的递归。其实就是一个大的问题拆分成许多的小问题,再读小问题进行重叠运算,这里和分治法最大的不同再于拆分小问题而直接做重叠运算,分治法是逐个解决再进行合并。

一条公式为 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;
     }

猜你喜欢

转载自blog.csdn.net/qq_41094072/article/details/134377971