OI动态规划&&优化 简单学习笔记
持续更新!!
DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点。
DP的类型
序列DP
【例题】BZOJ2298 problem a
数位DP
常用来统计或者查找一个区间满足条件的数,然后按数位顺序DO,一般需要仔细分情况讨论,常见处理如把区间拆为[1,l),[1,r][1,l),[1,r],记忆化,预处理等。
【例题】BZOJ3131 淘金
概率DP
概率DP是对一类求时间概率或者期望概率DP的总称。
对于求概率问题,有时利用补集转化,有时将其转化为计数问题。求期望大多利用期望的线性性来解决问题。还有一些较难的题目会用到贝叶斯公式。
【例题】BZOJ4008 亚瑟王
【例题】codeforces 113D
P(x,y)=P(y|x)P(x)≠P(y)(x)P(x,y)=P(y|x)P(x)≠P(y)(x)
P(y|x)P(x)=P(x|y)P(y)P(y|x)P(x)=P(x|y)P(y)
移项得出贝叶斯公式——
树形DP
【例题】BZOJ3611 大工程
【例题】BZOJ2734
树的直径
树的重心
树上最大权独立集
树形依赖背包
在dfs序上DP
虚树
在原树上只保留需要的点和他们的LCA的树称为虚树。
状压DP
基于状态压缩的 DP 是由于状态用单个简单的变量直接存储存在空 间的浪费, 而采用压缩的状态的动态规划, 例如: • 插头 DP: 维护当前已决策和未决策的一条 Z 字形的轮廓线的插 头状态, 用括号序列配对插头, 每次只需分情况讨论即可, 但是这 类 DP 的显著特点就是情况繁多, 使用时须细心
【例题】BZOJ3836 tourism
【例题】BZOJ2734 集合选数
DP套DP
某些DP问题的子问题不能简单地解决,而必须用另一个DP解决的问题。
即:外面的DP的状态是存的里面的DP各个状态的值,利用里层的状态来判断外层的DP是否合法,类似的问题有LCS为定值的序列的方案数等等。
【例题】BZOJ 3864
DP的优化
形式优化
【例题】BZOJ2436 嘉年华
决策单调性
【例题】诗人小G
什么是决策单调性(大家可以百度:浅析1D1D动态规划的优化)
如果导函数递增、求最大值(柠檬),或者导函数递减、求最小值,要用单调栈。
如果导函数递增、求最小值(本题),或者导函数递减、求最大值(Lightning Conductor),要用单调队列。
常见的决策单调性优化有四边形不等式优化,以及一些1D/1D动态规划的优化。
更多总结,题目联系,启发思想,参见flash_hu的博文——DP优化总结
四边形不等式优化:
对于如下的状态转移方程(max与min等价)
区间包含的单调性
如果对于i≤i′≤j≤j′i≤i′≤j≤j′,有w(i′,j)≤w(i,j′)w(i′,j)≤w(i,j′)
四边形不等式
如果对于i≤i′≤j≤j′i≤i′≤j≤j′,有w(i,j)+w(i′,j′)≤w(i′,j)+w(i,j′)w(i,j)+w(i′,j′)≤w(i′,j)+w(i,j′),我们称函数w满足四边形不等式。
定理一
如果上述的w函数同时满足区间单调性和四边形不等式,那么函数m也满足四边形不等式性质。
定理二
设s(i,j)s(i,j)表示m(i,j)m(i,j)取得最优值时对应的下标(即i≤k≤ji≤k≤j时,k处的w值最大,则s(i,j)=ks(i,j)=k)。那么假如m(i,j)m(i,j)满足四边形不等式,那么s(i,j)s(i,j)单调,即s(i,j)≤s(i,j+1)≤s(i+1,j+1)s(i,j)≤s(i,j+1)≤s(i+1,j+1)
具体如何优化呢?我们原来在计算f[i][j]f[i][j]的时候,枚举的k值范围是[i,j)[i,j),所以单次转移的复杂度是O(n)O(n),现在,我们既然知道了p[i][j−1]≤p[i][j]≤p[i+1][j]p[i][j−1]≤p[i][j]≤p[i+1][j],我们只需要把k的枚举范围改成p[i][j−1]p[i][j−1]至p[i+1][j]p[i+1][j]就好了!总体复杂度就变成了O(n^2)了!注意这里是闭区间,即p[i][j-1]和p[i+1][j]p[i+1][j]都能取到。下面给出简单证明。
对于固定的区间长度len,有
f[i][i+len]f[i][i+len]的决策范围为p[i][i+len−1]p[i][i+len−1]至p[i+1][i+len]p[i+1][i+len]
f[i+1][i+len+1]f[i+1][i+len+1]的决策范围为p[i+1][i+len]p[i+1][i+len]至p[i+2][i+len+1]p[i+2][i+len+1]
f[i+2][i+len+2]f[i+2][i+len+2]的决策范围为p[i+2][i+len+1]p[i+2][i+len+1]至p[i+3][i+len+2]p[i+3][i+len+2]
斜率优化
凸单调性
容斥
【例题】ZJOI2016 小星星
部分分+正解解题报告以及相似类型题目:参见shadowice1984
技巧们
1、凑系数【例题】BZOJ4671 异或图
2、平方处理【例题】BZOJ1566 管道取珠
3、反射法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!