什么是动态规划
用于求解某种最优性质的问题。
将带求解问题分解为若干个子问题,解决子问题,然后从这些子问题的解得到原问题的解
两个要素:状态和转移。
阶段 :求解的问题的每个过程。
状态 :状态表示每个阶段所处的情况。
策略 :策略是按顺序排列的策略组成的集合。 状态转移方程 ;状态转移方程是确定过程由一个状态到另一个状态的过程。
什么时候使用动态规划
最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,那么该问题具有最优子结构性质。(LIS)
子问题重叠性质:子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。(求Fibonacci)
无后效性:对于某个阶段状态,只能由前面的状态转移到,且不可以转移到前面。(对于有负边权求最短路,dijkstra是不可做的)\
动态规划是干什么的
DP常常适用于有重叠子问题和最优子结构性质的问题。
这时候就有许多同学,就开始问了:那他的步骤呢
很简单
设状态 列转移方程
今年普及组的同学注意了
常见动态规划类型有
背包问题
LIS
LCS
括号序列计数
区间DP
树形DP
数位DP