DP优化
朴素DP都写不出来怎么办捏qwq
纵观各种优化方式,可以发现DP的优化在于两个方面:转移和状态数。
转移的优化很多,大多数的优化都关注于转移。而状态数的优化大多是针对状态的设计。
一类特殊的DP:整体DP,试图兼顾这两个方面,利用DS囊括各种DP的状态时,同样利用DS的结构将具有相同转移的状态一起转移。
矩阵快速幂优化
将转移写成
矩阵的构造函数一定要写啊啊啊啊啊。小心出现神秘错误。
前缀和优化
一般的DP加上前缀和可以优化形如
对于一段连续区间求和,且
特别的,如果区间的一端是固定的,只增不减,用变量存一下就好了。
单调队列优化
优化形如
本质是及时排除不可能再有用的决策。
单调栈与单调队列都是类似的。
特别的,如果区间一端固定,另一端只增不减,用变量存一下就好了,不必用单调队列。
数据结构优化
特征:
一个状态可以从某个区间中的每个状态转移过来,且随着状态改变,对应区间没有单调性。
Sol:
用数据结构维护一下决策即可。
其实单调队列优化也算是特殊的DS优化,但是对应区间有单调性的性质很好,所以跑得更快。
线段树优化DP
特点是发现一次转移对应在DP数组上的区间修改和单点修改。于是用线段树维护DP数组。
平衡树优化DP
其实很多时候用的是unordered_map
或者map
,把DP数组的一维压到这里面,并且可以快速查找可以转移的位置。
李超线段树优化DP
形如
如果维护一堆直线就是单
维护线段的情况中如果线段有凹凸性就可以斜率优化。
整体DP
其实和数据结构优化DP有类似之处。
但是整体DP直接将DP中的一维压入数据结构之中。
通过数据结构上的单点修改/区间修改来快速维护此时此刻(枚举到的其他维度)的各个位置的DP值。
感觉像是将转移方程中的运算直接搞成修改。
可以发现整体DP是对
做的时候还是要先写朴素DP,然后通过一些手段优化到
线段树合并
维护树上的整体DP很方便(因为合并)。
普通的序列上的线段树不太方便维护树上的信息,于是改造成线段树合并。
维护时同样支持单点修改/区间修改 etc.
首先是朴素DP。
定义
方程里的前缀后缀和直接优化就到
但是由于值域很大,状态数超级多,
具体而言,点
首先,当点
合并中,改造一下原来的merge
,记录当前合并的线段树节点
当
由于题目中给了权值互不相同,所以两棵线段树合并时值域不会重叠,于是肯定会出现一棵为空而另一棵不会空的情况。所以就做完了。
决策单调性优化
四边形不等式
就是利用四边形不等式判断决策是否有单调性。
证明不会。
单调性猜测一下就好,考场上证不了一点,可以打表找找规律看是否单调。
有了决策单调性就好办了,主要有两种方式来优化DP。
单调队列+二分
我们把决策塞到单调队列里面(其实很自然,决策有单调性嘛),然后维护一下单调性即可。
让我们更具体一点。
队列中保存决策
-
首先队列中塞入
(或者其他初始条件),准备开始DP。 -
现在我们要计算
,先从队首将 的决策出队(因为已经没用了),然后用队首计算 。 -
然后考虑插入
这个决策。不断取出队尾 ,若用 更新 更优,那么队尾的这个决策就是没用的,出队。 -
最后对于队尾
,用 更新 更优,那么 这个决策可能没用,也可能在 与 之间某处开始比 更优。于是二分,注意边界要开大来判断无解(就是 没用的情况)。 -
若
没用,就跳过了去算下一个。否则要插入 这个决策。设二分出 比 更优的第一个位置为 ,修改 为 ,插入决策 。
分治
是离线版本的决策单调性优化,即当前的DP数组从另一个现在完全已知的数组中转移过来。也就是说从
但是分治真的很好写。
设当前要确定决策点的区间为
那么我们可以先算
然后就做完了。
指针移动的Trick
有些
但是每一层都暴力扫会假,不会证。
于是可以在分治外维护指针,每一层要算贡献时就像莫队一样移动指针即可。注意这样每层的指针移动量是
注意事项
-
带有上取整,下取整,绝对值的大概率不满足决策单调性,要转化(绝对值就拆掉,取整就先用
long double
算,最后再取整)。 -
可以猜单调性但别乱猜,最好能打表,时间充裕再证。
凸优化
斜率优化DP
形如
其中
变形为
令:
注意到有用的点都是凸壳上的点(上凸或者下凸)。
单调队列维护凸包
和普通的单调队列一样。以下凸为例,弹出队尾当且仅当
注意:如果要二分,上面的
横坐标单调,斜率单调
那就是板子啊,随便单调队列就行。
注意横坐标不严格单调时可能相等的情况,算斜率的时候判一下。
横坐标单调,斜率不单调
还是单调队列维护点,然后二分查询。
横坐标不单调,斜率单调
没做过,或许继续单调队列,然后在队列中二分插入点。
横坐标不单调,斜率不单调
上李超线段树/CDQ分治/平衡树。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】