斜率优化总结

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

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

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

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

假设我们有两个决策点 ij,要求在 x 处的最值。

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

x×k[i]+b[i]<x×k[j]+b[j]

x<b[j]b[i]k[i]k[j]

x>b[j]b[i]k[j]k[i]

你也可以:

k[i]k[j]b[j]b[i]<1x

k[i]k[j]b[i]b[j]>1x

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

但是需要注意几点。

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

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

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

本文作者:Prean

本文链接:https://www.cnblogs.com/lmpp/p/16158467.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Prean  阅读(38)  评论(0编辑  收藏  举报
var canShowAdsense=function(){return !!0};
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起