斜率优化总结

妈的这玩意儿实在是太神秘了。。。一会儿对x排序一会儿对y排序,一会儿建凸包一会儿李超树。。。

这些细节性的东西还是写一个总结为好。不然以后一直犯要吃大亏。

众所周知斜率优化的方程都能够写成类似 \(dp[i]=\max_{j=1}^{n}(x[i]\times k[j]+b[j])\)。即一个一次函数的形式,并且这个一次函数是动态给出的。这个形式决定了斜率优化肯定能用李超树去做。

但是如果要求线性呢?线性一般使用单调队列,还是得去推柿子。

假设我们有两个决策点 \(i\)\(j\),要求在 \(x\) 处的最值。

众所周知最值问题都可以通过寻找谁比谁逊来解决。

\[x\times k[i]+b[i]<x\times k[j]+b[j] \]

\[x<\frac{b[j]-b[i]}{k[i]-k[j]} \]

\[-x>\frac{b[j]-b[i]}{k[j]-k[i]} \]

你也可以:

\[\frac{k[i]-k[j]}{b[j]-b[i]}<\frac{1}{x} \]

\[\frac{k[i]-k[j]}{b[i]-b[j]}>-\frac{1}{x} \]

对于第一种情况,需要找到一个点满足前面的斜率都比 \(-x\) 小,后面的都比 \(-x\) 大,所以需要斜率递增的下凸壳。同理,后者需要上凸壳。

但是需要注意几点。

如果要使用单调队列维护凸壳,需要保证给出的分母是递增的。(因为实际上是前缀的凸壳,每次都需要重新排序的);如果要线性寻找答案,需要保证对应的 \(-x\)\(-\frac{1}{x}\) 是递增的。

这个其实做题的时候分析比较好。。。如果记结论容易写挂的说。。。

如果以上二者都不满足,最好使用李超线段树,常数不大+好写好调,不像某个CDQ套凸包要调半天。

posted @ 2022-04-18 10:19  Prean  阅读(35)  评论(0编辑  收藏  举报
var canShowAdsense=function(){return !!0};