动态规划(Dynamic Programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

动态规划的特点

  • 最优子结构:一个问题的最优解包含其子问题的最优解。
  • 子问题重叠:不同的问题会包含相同的子问题。
  • 无后效性:一个给定问题的子问题解不会受后续子问题解的影响。

动态规划的应用

动态规划广泛应用于算法设计中,如:

  • 背包问题
  • 最长公共子序列
  • 最长递增子序列
  • 矩阵链乘
  • 斐波那契数列

例子:斐波那契数列

斐波那契数列(Fibonacci sequence)是一个著名的序列,其递推公式为:F(n) = F(n-1) + F(n-2),其中 F(0) = 0, F(1) = 1。

以下是一个使用动态规划求解斐波那契数列的示例:

def fibonacci(n):
    if n <= 1:
        return n
    dp = [0] * (n + 1)
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]

print(fibonacci(10))  # 输出 55

更多关于动态规划的内容,您可以访问我们的动态规划教程页面。

Dynamic Programming