首页 > 代码库 > 小结:动态规划

小结:动态规划

概要:

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

技巧及注意:

dp就是纯经验+智商题

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

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

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

如果是线性序列的max{f[k]},k<i这种可以用线段树或bit维护成log

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

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

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

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

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

 

例题:

线性dp:最长公共上升子序列(不要看我自己的解释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】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)

背包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)

状压dp:【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp),【wikioi】2800 送外卖(状压dp+floyd)

数位dp:【BZOJ】1662: [Usaco2006 Nov]Round Numbers 圆环数(数位dp)

 

小结:动态规划