常见的动态规划类型:
线性模型
区间DP
背包DP
数位DP
状态压缩DP
树状DP
常见的DP优化方法
滚动数组优化
矩阵乘法优化
斜率优化
四边形不等式优化
决策单调性优化
数据结构优化
动态规划基本概念
1.阶段和阶段变量:
2.状态
3.决策
4.策略
5.状态转移方程
例:从n个数取出k个数,使得他们的和最大
一般我们可能用排序做,为了讲解动态规划,我们设计一个状态f[i][j],
f[i][j]表示现在考虑到了第i个数,且选出了j个数
阶段的划分:i表示考虑了第1到第i个数
状态:j,在第i个阶段可以取的j为0<=j<=i
决策:在考虑第i个数时,选或者不选
策略:选出的数尽量大
状态转移方程:f[i][j]表示已经考虑第i个数,且找到了最大和,对于f[i][j],如果取a[i],那么最大价值变为a[i]+f[i-1][j-1];如果不取那个数,最大和为f[i-1][j]
所以f[i][j]=max{f[i-1][j],f[i-1][j-1]+a[i]}
例:从n个数里找出最长上升子序列(12534的最长上升子序列为1234)
f[i][j]表示目前考虑到了第i个数,最序列里最后一个数是j的最长上升子序列长度
状态转移方程:当取a[i]时:f[i][a[i]]=max{f[i-1][j]|j<=a[i]}+1
不取a[i]时:f[i][j]=f[i-1][j]
动态规划的性质:
怎么样的多阶段决策问题才可以用动态规划的方法来求解呢?
必须满足两个条件:最优化原理;无后效性原则
最优化原理:作为整个过程的最优策略,具有:无论过去的状态和策略如何,对前面的策略形成的状态而言,剩下的所有决策必须构成最优