📌 什么是动态规划?

动态规划(Dynamic Programming, DP)是一种通过分解问题存储中间结果来优化递归算法的策略,常用于解决具有重叠子问题最优子结构的复杂问题。

动态规划

🧩 核心概念解析

  • 状态定义:明确每一步决策后问题的当前状态(如dp[i]表示前i个元素的最优解)
  • 状态转移方程:找到子问题与原问题的关联公式(如dp[i] = max(dp[i-1], dp[i-2] + ...))
  • 初始化条件:设置初始状态的值(如dp[0] = 0dp[1] = 1
  • 滚动数组优化:减少空间复杂度(适用于仅需前几项的状态)

📈 典型应用场景

  1. 背包问题

    背包问题
    - 0-1背包:`[扩展阅读](/leetcode_practice)` - 完全背包:`[深入解析](/algorithm_tutorials)`
  2. 最长公共子序列

    最长公共子序列
    - 使用DP数组存储字符匹配结果 - 时间复杂度:`O(n*m)` (n,m为字符串长度)
  3. 斐波那契数列优化

    斐波那契数列
    - 传统递归:`O(2^n)` → DP优化后:`O(n)`

📚 推荐学习资源

💡 学习建议

  1. 先掌握递归思想再理解DP
  2. 通过经典题目(如打家劫舍)巩固技巧
  3. 使用可视化工具辅助理解状态转移过程
动态规划流程图