1、数字三角形模型
https://www.acwing.com/activity/content/code/content/9462060/
https://www.acwing.com/activity/content/code/content/9462284/
https://www.acwing.com/activity/content/code/content/9462565/
2、最长上升子序列模型
https://www.acwing.com/activity/content/code/content/9463776/
https://www.acwing.com/activity/content/code/content/9463969/
https://www.acwing.com/activity/content/code/content/9467242/
https://www.acwing.com/activity/content/code/content/9467521/
https://www.acwing.com/activity/content/code/content/9471542/
https://www.acwing.com/activity/content/code/content/9472660/
https://www.acwing.com/activity/content/code/content/9473258/
3、背包模型
https://www.acwing.com/activity/content/code/content/9477434/
https://www.acwing.com/activity/content/code/content/9481886/
https://www.acwing.com/activity/content/code/content/9485991/
https://www.acwing.com/activity/content/code/content/9487265/
https://www.acwing.com/activity/content/code/content/9487041/
https://www.acwing.com/activity/content/code/content/9487175/
https://www.acwing.com/activity/content/code/content/9487335/
https://www.acwing.com/activity/content/code/content/9487449/
https://www.acwing.com/activity/content/code/content/9487566/
https://www.acwing.com/activity/content/code/content/9487687/
https://www.acwing.com/activity/content/code/content/9487718/
https://www.acwing.com/activity/content/code/content/9487824/
https://www.acwing.com/activity/content/code/content/9487838/
4、状态机模型
状态机定义:有一系列有顺序的事件 , 而状态机能把这个事件中的各个时间表示清楚
比如说01背包就不是状态机模型 ,因为他只有选和不选没有过多的转换
而比如说买股票、买股票他是经历了很长时间不能用传统方式很好的表示,此时就要用状态机
把他分解成2个部分
https://www.acwing.com/activity/content/code/content/9488897/
https://www.acwing.com/activity/content/code/content/9488967/
https://www.acwing.com/activity/content/code/content/9489181/
https://www.acwing.com/activity/content/code/content/9489536/
5、状态压缩DP
(a)棋盘类
https://www.acwing.com/activity/content/code/content/9489986/
https://www.acwing.com/activity/content/code/content/9489978/
https://www.acwing.com/activity/content/code/content/9490797/
做法总结:用一个vector存下所有合法状态(state) ,
再用一个vector存哪些状态可以互相转移,剩下的根据具体题目
(b)集合类
https://www.acwing.com/activity/content/code/content/9491952/
https://www.acwing.com/activity/content/code/content/9493717/
6、区间DP
回顾:https://www.acwing.com/blog/content/73065/
回顾:https://www.acwing.com/activity/content/code/content/9456132/
https://www.acwing.com/activity/content/code/content/9494357/
https://www.acwing.com/activity/content/code/content/9494495/
https://www.acwing.com/activity/content/code/content/9495158/
https://www.acwing.com/activity/content/code/content/9496226/
https://www.acwing.com/activity/content/code/content/9496522/
7、树形DP
https://www.acwing.com/activity/content/code/content/9498761/
https://www.acwing.com/activity/content/code/content/9498884/
https://www.acwing.com/activity/content/code/content/9499085/
https://www.acwing.com/activity/content/code/content/9499259/
https://www.acwing.com/activity/content/code/content/9499509/
8、数位DP
通常用来解决在一段区间内,满足一定要求的整数的个数
技巧1:求解[x,y]区间,如果把f(i)定义成[1,i]有几个满足条件的数,那么[x,y] = f(y) - f(x - 1)
技巧2:尽量用树的方法考虑
https://www.acwing.com/activity/content/code/content/9499945/
https://www.acwing.com/activity/content/code/content/9500115/
https://www.acwing.com/activity/content/code/content/9501229/