CSP-J/S复赛算法 动态规划初步

文章目录

  • 前言
  • 动态规划
  • 动态规划常见形式
    • 动态规划求最值的几个例子
      • 1. **背包问题**
      • 2. **最短路径问题**
      • 3. **最小硬币找零问题**
      • 4. **最长递增子序列**
    • 总结
  • 最优子结构
    • 举个简单的例子
    • 其他例子
    • 条件
  • DP的核心就是穷举
      • 具体解释
  • 递归的算法时间复杂度
  • dp数组的迭代解法
    • 通俗易懂的解释
    • 比喻
  • 状态转移方程详解
    • 状态转移方程中的状态概念
      • 通俗易懂的解释:
      • 举个例子:
      • 状态总结:
  • DP的无后效性
    • 通俗易懂的解释
    • 举个例子
    • 特点总结
    • 例子
  • DP的本质
    • 动态规划(DP)为什么快?
    • 通俗解释
    • 动态规划的核心是什么?
    • 如何设计DP算法
      • 1. **我是谁?(设计状态)**
      • 2. **我从哪里来?(状态表示:f(x))**
      • 3. **我要到哪里去?(设计状态转移)**
      • 设计 DP 算法的一般步骤:
      • 举个例子:
  • 总结


前言


动态规划

动态规划(Dynamic Programming)其实是一个很聪明的“拆问题”的方法。我们常常会遇到一些很大的问题,比如要做很多选择,走很多步才能完成。动态规划就是把这些问题一步步拆成小问题来解决,每次解决小问题的时候,都记住这个问题的答案,以后如果再遇到这个问题,就不用重新计算了,直接用之前的答案。

动态规划常见形式

动态规划的一个常见形式就是求最值,也就是在一系列选择中找到最优解(比如最大值或最小值)。问题可以是找最短路径、最大利润、最少步骤等等。动态规划的核心思想是通过把大问题分解成小问题,然后一步步解决小问题,最终找到整个问题的最优解。

动态规划求最值的几个例子

1. 背包问题

想象你有一个背包,能装有限的重量,同时有许多物品,每个物品有不同的重量和价值。你想装入背包的物品总价值最大,但又不能超过背包的承重。动态规划可以帮助你在选择哪些物品时,找到一个最优方案,使背包内物品的总价值最高。

2

你可能感兴趣的:(CSP-J,算法,动态规划,深度优先,c++,noi,CSP-J/S)