关于DP的一些概念与做题步骤
DP其实就是递推啦
关键:
1.最优子结构(这个很nb的)
2.无后效性
不能出现环(可以断环为链的不算)
即未来与过去无关,当前的状态是此前历史一个完整的总结
此前的历史只能通过当前的状态去改变未来
即阶段k只与阶段k-1有关
3.动态转移方程:
(1):找出最优解性质,写出f(一维二维还是三维?表示什么?)
目前,我们f可代表的有:
f[i]-i处的最优值,
f[i][j]--i到j的最优值
f[i][j]--多维限制背包
f[i][j]--出i入j的最优值
可知一般都是最优值,但我们要找出这个最优值是由什么决定
(2)根据最优值的决定因素写出最优值的定义
倒推模板
顺推模板
L就是个邻接矩阵,opt为min或max,是状态转移的求解函数
用途:
求最优值,方案数
注意的点:
1.阶段:
阶段按照时间空间划分(区间DP)
一般用k来表示
2.状态:
状态很重要,一定要维护好状态
一定要确定好下一个状态是怎么由之前的状态转移过来的
比如说最大值最小值问题,出现负边权就要维护一个最小值
3.边界
这个也很重要,他是转移过程中的初始状态
比如区间环状DP,我们在枚举右端点时要考虑他的状态是否满足初始状态的规定与要求
比如背包DP,我们在枚举j容积与k决策数时(尤其是滚动数组时),也要考虑是否满足最初给定的条件