浅谈动态规划
最近连续好几天都在复习动态规划,也算有点心得体会,再次略记一下
-
动态规划的思路来源
动态规划是近几年的常考题目,所以如果想要学好动规,就必须要活学活用。
做出动态规划一般分为以下几个步骤:
-
定状态:
状态是一个动规题的灵魂,状态的定义一般有一些常用方式,比如说:当前元素是否被用过?(可以用0/1来表示用过或没用过),最重要的是,要求什么什么就设什么,其他影响它的因素全都放到状态的其他维里。
-
初始化:
动规的初始化很简单,其实就有下面几种常见方式:
(1) 求最大值,则初始化成负无穷(最小值反之)
(2) 不合法的状态初始化成正无穷(有时是负无穷,还有时候是0) -
定转移:
有了状态,转移方程也就好写了,一般就要考虑,当前状态是被那个状态转移来的?当前状态可以转移到那些状态?从而进行转移
-
动态规划的分类
动态规划分类很多,一般来说,常用的有以下几种:
- 线性动规(题型灵活,极为常见)
- 树形动规(偏难,较为灵活,可以与背包,记搜等结合)
- 区间DP (题目难度不大,不是非常灵活)
- 状态压缩DP (数据很小,扩展性不高,极难理解)
-
动态规划的写法
对于我个人而言(然鹅我也很蒟蒻),一般是先定一个极为复杂的状态(有时可以达到8维),然后写一遍转移方程,最后进行优化(降维等)
-
个人对DP的看法
俗话说的好:
OI毒瘤千千万,DP树剖各一半 \(\ \ \ \ \ \ ——by 某博客\)
(动态规划确实比树剖难得多)我只有一句话了,DP真是太毒瘤了!!