小结:动态规划
概要:
状态、转移;最优子结构、无后效性。
技巧及注意:
dp就是纯经验+智商题
在dp方程写出来后,一定要考虑边界!不要以为转移对了就行了!
滚动数组的话一定要考虑好顺序!
下标有时候可以灵活使用!比如mod意义下的dp,倍数什么、可到达性等题目都可以这样做。
如果是线性序列的max{f[k]},k<i这种可以用线段树或bit维护成log或者斜率优化或者决策单调用单调栈
注意“前i”和“第i”的区别(特别对于答案更新),有时换一种就能解答出问题。
在状态加限制条件,如单调、地址等。
用下标来维护下标这个答案是否可达。
博弈论dp可以设当前最优然后后手就是sum-这个前个状态。
与上一个状态或下一个状态有关,可以开一维或多维来维护上个状态或下个状态的信息。
在计数时,一定要保证自己设的状态是不重不漏的!或者能用容斥搞的!
绝对值的最小/最大我们可以用背包。
一切有顺序的dp一定要考虑循环方向!就像状压dp的|运算话如果不分层,那么一定要从大往小循环
例题:
线性dp(usaco及以上非省选题请神犇无视...>_<):
- 最长公共上升子序列(不要看我自己的解释QAQ)
- LIS+LCS+LCIS
- 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
- 【BZOJ】3039: 玉蟾宫(DP/单调栈)
- 【wikioi】1403 新三国争霸(dp+kruskal)
- 【BZOJ】1600: [Usaco2008 Oct]建造栅栏(dp)
- 【BZOJ】1613: [Usaco2007 Jan]Running贝茜的晨练计划(dp)
- 【BZOJ】1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(dp/-bfs)
- 【BZOJ】1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛(lis)(主要是lower_bound)
- 【BZOJ】1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(dp+被坑)
- 【BZOJ】1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
- 【BZOJ】1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪(dp)
- 【BZOJ】1638: [Usaco2007 Mar]Cow Traffic 奶牛交通(dfs+dp)
- 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)
- 【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)(数据结构进入dp维护)
- 【BZOJ】1652: [Usaco2006 Feb]Treats for the Cows(dp)
- 【BZOJ】1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(线段树+dp)
- 【BZOJ】1630: [Usaco2007 Demo]Ant Counting(裸dp/dp/生成函数)
- 【BZOJ】3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队(dp)
- 【BZOJ】2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(dp)
- 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)
- 【BZOJ】3315: [Usaco2013 Nov]Pogo-Cow(dp)
- 鹰蛋实验(递归定义)
- 带*号的公共字串匹配
- 【noip模拟题】迎接仪式(dp+特殊的技巧)(很神的题,将约束拆成两个状态)
- 【BZOJ】1010: [HNOI2008]玩具装箱toy(dp+斜率优化)(第一题斜率优化)
- 【BZOJ】1046: [HAOI2007]上升序列(dp)(lis字典序)
- 【BZOJ】1044: [HAOI2008]木棍分割(二分+dp)(找出答案后再用答案对dp进行约束...)
- 【BZOJ】1009: [HNOI2008]GT考试(dp+矩阵乘法+kmp+神题)(神题...写出dp方程后发现每个阶段的转移都是一模一样的!于是可以转换成矩阵然后做乘法加速!)
- 【BZOJ】1037: [ZJOI2008]生日聚会Party(递推+特殊的技巧)(又是神题...我们将约束放得更广一些...将更多的约束条件放入状态中)
- 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)(可以说是真正理解斜率优化?)
- 【BZOJ】1068: [SCOI2007]压缩(dp)(转换一下将条件放入状态即可)
- 【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)(神题!没想到状态还能这样压缩!其实就是将等价的东西变成一个状态就行了)
- 【BZOJ】1090: [SCOI2003]字符串折叠(dp)(随便搞搞就行了)
- 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)(lis+神做法!好神的题!)
- 【BZOJ】1055: [HAOI2008]玩具取名(dp)(多想想就能想出状态了)
背包dp:
- 背包模版
- 【BZOJ】1618: [Usaco2008 Nov]Buying Hay 购买干草(dp)
- 【BZOJ】1677: [Usaco2005 Jan]Sumsets 求和(dp/规律)
- 【BZOJ】1649: [Usaco2006 Dec]Cow Roller Coaster(dp)
- 【BZOJ】1673: [Usaco2005 Dec]Scales 天平(dfs背包)
- 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)
- 寂寞的程序员
环形dp:拆成3部分(或两部分)线性dp即可。
树形dp:
- 【wikioi】1029 遍历问题
- 【BZOJ】1040: [ZJOI2008]骑士(环套树dp)
- 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)
- 【BZOJ】1827: [Usaco2010 Mar]gather 奶牛大集会(树形dp)
- 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛(树形dp)
- 【vijos】1770 大内密探(树形dp+计数)(不重不漏的设计状态是关键)
- 【vijos】1892 树上的最大匹配(树形dp+计数)
- 【BZOJ】2435: [Noi2011]道路修建(树形dp)(很水的noi题...)
状压dp:
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
- 【wikioi】2800 送外卖(状压dp+floyd)
- 【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)
- 【BZOJ】1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压dp)
- 【vijos】1286 座位安排(状压dp)
- 驴友(状压出所有状态然后预处理状态之间的关系再用最短路)
- 【UVa】Headmaster's Headache(状压dp)(一定要注意状压的方向...)
- 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)(以后永远记住,小数据优先想到状压...)
- 【BZOJ】1097: [POI2007]旅游景点atr(spfa+状压dp)(去掉一些无用状态就用记忆化搜索...)
数位dp(注意front和line的情况,line一定要并上!):
- 【BZOJ】1662: [Usaco2006 Nov]Round Numbers 圆环数(数位dp)
- 【BZOJ】1026: [SCOI2009]windy数(数位dp)
- 【BZOJ】1833: [ZJOI2010]count 数字计数(数位dp)
递推(计数时一定要小心啊):
- noip 模拟赛 After 17(递推+特殊的技巧),电站问题(升格思想)
- 错排公式(D(n) = (n-1) [D(n-2) + D(n-1)])
- Stirling数(第一类:s(n,k)=s(n-1,k-1)+(n-1)*s(n-1,k);第二类:S(n,k)=S(n−1,k−1)+k*S(n−1,k))
- 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)(减法原理运用得好神)
博客地址:www.cnblogs.com/iwtwiioi 本文为博主原创文章,未经博主允许不得转载。一经发现,必将追究法律责任。