小结:动态规划

概要:

状态、转移;最优子结构、无后效性。

技巧及注意:

dp就是纯经验+智商题

在dp方程写出来后,一定要考虑边界!不要以为转移对了就行了!

滚动数组的话一定要考虑好顺序!

下标有时候可以灵活使用!比如mod意义下的dp,倍数什么、可到达性等题目都可以这样做。

如果是线性序列的max{f[k]},k<i这种可以用线段树或bit维护成log或者斜率优化或者决策单调用单调栈

注意“前i”和“第i”的区别(特别对于答案更新),有时换一种就能解答出问题。

在状态加限制条件,如单调、地址等。

用下标来维护下标这个答案是否可达。

博弈论dp可以设当前最优然后后手就是sum-这个前个状态。

与上一个状态或下一个状态有关,可以开一维或多维来维护上个状态或下个状态的信息。

在计数时,一定要保证自己设的状态是不重不漏的!或者能用容斥搞的!

绝对值的最小/最大我们可以用背包。

一切有顺序的dp一定要考虑循环方向!就像状压dp的|运算话如果不分层,那么一定要从大往小循环

 

例题:

线性dp(usaco及以上非省选题请神犇无视...>_<):

  1. 最长公共上升子序列(不要看我自己的解释QAQ)
  2. LIS+LCS+LCIS
  3. 【BZOJ】1003: [ZJOI2006]物流运输trans(SPFA+DP)
  4. 【BZOJ】3039: 玉蟾宫(DP/单调栈)
  5. 【wikioi】1403 新三国争霸(dp+kruskal)
  6. 【BZOJ】1600: [Usaco2008 Oct]建造栅栏(dp)
  7. 【BZOJ】1613: [Usaco2007 Jan]Running贝茜的晨练计划(dp)
  8. 【BZOJ】1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(dp/-bfs)
  9. 【BZOJ】1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛(lis)(主要是lower_bound)
  10. 【BZOJ】1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(dp+被坑)
  11. 【BZOJ】1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
  12. 【BZOJ】1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪(dp)
  13. 【BZOJ】1638: [Usaco2007 Mar]Cow Traffic 奶牛交通(dfs+dp)
  14. 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)
  15. 【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)(数据结构进入dp维护)
  16. 【BZOJ】1652: [Usaco2006 Feb]Treats for the Cows(dp)
  17. 【BZOJ】1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(线段树+dp)
  18. 【BZOJ】1630: [Usaco2007 Demo]Ant Counting(裸dp/dp/生成函数)
  19. 【BZOJ】3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队(dp)
  20. 【BZOJ】2101: [Usaco2010 Dec]Treasure Chest 藏宝箱(dp)
  21. 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)
  22. 【BZOJ】3315: [Usaco2013 Nov]Pogo-Cow(dp)
  23. 鹰蛋实验(递归定义)
  24. 带*号的公共字串匹配
  25. 【noip模拟题】迎接仪式(dp+特殊的技巧)(很神的题,将约束拆成两个状态)
  26. 【BZOJ】1010: [HNOI2008]玩具装箱toy(dp+斜率优化)(第一题斜率优化)
  27. 【BZOJ】1046: [HAOI2007]上升序列(dp)(lis字典序)
  28. 【BZOJ】1044: [HAOI2008]木棍分割(二分+dp)(找出答案后再用答案对dp进行约束...)
  29. 【BZOJ】1009: [HNOI2008]GT考试(dp+矩阵乘法+kmp+神题)(神题...写出dp方程后发现每个阶段的转移都是一模一样的!于是可以转换成矩阵然后做乘法加速!)
  30. 【BZOJ】1037: [ZJOI2008]生日聚会Party(递推+特殊的技巧)(又是神题...我们将约束放得更广一些...将更多的约束条件放入状态中)
  31. 【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)(可以说是真正理解斜率优化?)
  32. 【BZOJ】1068: [SCOI2007]压缩(dp)(转换一下将条件放入状态即可)
  33. 【BZOJ】1079: [SCOI2008]着色方案(dp+特殊的技巧)(神题!没想到状态还能这样压缩!其实就是将等价的东西变成一个状态就行了)
  34. 【BZOJ】1090: [SCOI2003]字符串折叠(dp)(随便搞搞就行了)
  35. 【BZOJ】1049: [HAOI2006]数字序列(lis+特殊的技巧)(lis+神做法!好神的题!)
  36. 【BZOJ】1055: [HAOI2008]玩具取名(dp)(多想想就能想出状态了)

背包dp:

  1. 背包模版
  2. 【BZOJ】1618: [Usaco2008 Nov]Buying Hay 购买干草(dp)
  3. 【BZOJ】1677: [Usaco2005 Jan]Sumsets 求和(dp/规律)
  4. 【BZOJ】1649: [Usaco2006 Dec]Cow Roller Coaster(dp)
  5. 【BZOJ】1673: [Usaco2005 Dec]Scales 天平(dfs背包)
  6. 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)
  7. 寂寞的程序员

环形dp:拆成3部分(或两部分)线性dp即可。

树形dp:

  1. 【wikioi】1029 遍历问题
  2. 【BZOJ】1040: [ZJOI2008]骑士(环套树dp)
  3. 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)
  4. 【BZOJ】1827: [Usaco2010 Mar]gather 奶牛大集会(树形dp)
  5. 【BZOJ】2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛(树形dp)
  6. 【vijos】1770 大内密探(树形dp+计数)(不重不漏的设计状态是关键)
  7. 【vijos】1892 树上的最大匹配(树形dp+计数)
  8. 【BZOJ】2435: [Noi2011]道路修建(树形dp)(很水的noi题...)

状压dp:

  1. 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
  2. 【wikioi】2800 送外卖(状压dp+floyd)
  3. 【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)
  4. 【BZOJ】1688: [Usaco2005 Open]Disease Manangement 疾病管理(状压dp)
  5. 【vijos】1286 座位安排(状压dp)
  6. 驴友(状压出所有状态然后预处理状态之间的关系再用最短路)
  7. 【UVa】Headmaster's Headache(状压dp)(一定要注意状压的方向...)
  8. 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)(以后永远记住,小数据优先想到状压...)
  9. 【BZOJ】1097: [POI2007]旅游景点atr(spfa+状压dp)(去掉一些无用状态就用记忆化搜索...)

数位dp(注意front和line的情况,line一定要并上!):

  1. 【BZOJ】1662: [Usaco2006 Nov]Round Numbers 圆环数(数位dp)
  2. 【BZOJ】1026: [SCOI2009]windy数(数位dp)
  3. 【BZOJ】1833: [ZJOI2010]count 数字计数(数位dp)

递推(计数时一定要小心啊):

  1. noip 模拟赛 After 17(递推+特殊的技巧)电站问题(升格思想)
  2. 错排公式(D(n) = (n-1) [D(n-2) + D(n-1)])
  3. 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))
  4. 【BZOJ】1089: [SCOI2003]严格n元树(递推+高精度/fft)(减法原理运用得好神)

你可能感兴趣的:(动态规划)