C++高级数据结构算法 | 动态规划(Dynamic Programming)

文章目录

    • 从斐波那契数列谈起
    • 动态规划的基本概念
    • 动态规划的基本思想
    • 动态规划经典题目分析
      • 钢条切割问题
      • 硬币问题
      • 最大子段和问题
      • 最长递增子序列(LIS)
      • 最长公共子序列(LCS)
      • 0-1背包问题


从斐波那契数列谈起

首先先来谈谈我们非常熟悉的斐波那契数列:

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……n。在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。

问题描述很清楚,并且给出了递推式,那么我们可以很简单的实现一个递归版本:

你可能感兴趣的:(算法与数据结构精析)