最近做了几道简单的斜率优化题,发现其实对于式子画出来的半凸包是有规律的,来分享一下。(这里只针对横坐标单调递增且查询的斜率恒正或者恒负的情况)
1,照常用朴素的式子(一般O(n^2))推到一边只含j(就是y),另外一边含kx+b的形式,然后不要用不等式来强推(这样不会错,但是很烦)。
2,假如题目求最小值,就是一条直线从下往上扫描,同时对应的是下凸包(这里的下是指大致为y=1/x当x>0时的图像或者是y=-1/x当x<0时的图像);同理,最大值为上凸包(这里的上是指大致为y=1/x当x<0时的图像或者是y=-1/x当x>0时的图像)。
3,假如查询的斜率是正数,就是大概y=-1/x的图像(只取一支,视乎满足2中的哪个条件),假如是负数,则相反,是y=1/x的图像。
这样大概就可以把图像画出来了,然后就可以很简单地数形结合来做题了。
当然这里只是对于最简单的那种情况,假如别的不单调,要用二分斜率或者是平衡树的方法来维护DP。
4,其实斜率优化有一些题目还可以拆成一次查询和一次凸包尾部插入,所以有一些题(比如说NOI2019day1T1回家路线)你就可以把操作分成两次来做,更加简便。