斜率优化学习笔记

斜率优化是个好东西,,,然而$sd\ gql$一直想学却一直没$get$嘤嘤嘤

所以在拖了$inf$天之后总算还是来开个斜率优化的坑,,,

然后因为斜率优化只是个方法,所以可能就不像别的知识点分好几个方面,我估计我就只港下原理,然后放几道经典题$QwQ$?

$over$

好然后接下来就要进入正题了嗷$QwQ$

原理

从一个例题入手港趴.玩具装箱(我感觉这是斜率优化最经典一道例题,,,?好像我看到的每一篇斜率优化题解都是拿它引入的$hhh$

首先推出$O(n^{2})$的$dp$式嘛,就$f_{i}=(f_{j}+(i-j+sum[i]-sum[j]-1-l)^{2})_{min},j<i$,且$sum_{i}$单增

设$A=sum_{i}+i,B=sum_{j}+j+l+1$(只与$A$有关&只与$B$有关$QwQ$

为了方便先把$min$搞掉,于是原式可化为$f_{i}=f_{j}+(A-B)^{2}\\f_{i}=f_{j}+A^{2}+B^{2}-2\cdot A\cdot B\\f_{j}+B^{2}=2\cdot A\cdot B+f_{i}-A^{2}$

设$y=f_{j}+B^{2},k=2\cdot A,x=B,b=f_{i}-A^{2}$

于是这个就化成了一个,直线解析式,现在的目标就是使截距$min$咯$QwQ$

没有图自己意会着想下,,,?

大概想象下,在坐标轴上有若干个点,坐标为(B,f_{j}+B^{2}),每个点都被斜率相同($=A_{i}$)的直线穿过,然后现在求的是$b_{min}$

感性思考下不难发现构成下凸壳的$(B,f_{j}+B^{2})$才可能为最优解

瞎证下趴

若对于$j_{1},j_{2},j_{3}$,若$j_{2}$可能为最优解,则有$b_{1}\geq b_{2},b_{2}\leq b_{3}$,代入式子得$y_{1}-k\cdot x_{1}\geq y_{2}-k\cdot x_{2},y_{2}-k\cdot x_{2}\leq y_{3}-k\cdot x_{3}\\y_{2}-y_{1}\leq k\cdot (x_{2}-x_{1}),y_{3}-y_{2}\geq k\cdot (x_{3}-x_{2})$

变下形可得,若$j_{2}$可能为最优解,一定有$\frac{y_{2}-y_{1}}{x_{2}-x_{1}}\leq \frac{y_{3}-y_{2}}{x_{3}-x_{2}}$,也就说相邻两点的斜率一定要是递增的,也就是说要维护一个下凸壳

欧克然后这题就大概港完辣,,,呜呜呜我总算$get$斜率优化了,,,果然还是太愚蠢嘛我感觉我学了好久才懂嘤嘤嘤,,,

$upd:$凸包的好难理解啊,,,我改入半平面交了$kk$

注意点

主要是提醒自己的,,,$QwQ$

1)队列最初不能为空,且必须放0.不能放1是因为可能存在从0转移过来的结果,就会挂

2)$min$维护下凸包,$max$维护上凸包

3)不等号方向,,,$QAQ$

4)尽量让$x$单增,不然容易出现一些乱七八糟的错误$QAQ$

5)斜率优化其实有个前提条件,是说,$x$坐标必须是单调的,然后现在考虑,如果不单调怎么做呢?就要考虑用平衡树/$cdq$分治辽$QwQ$(目前还太菜了没碰到过这种题目,,,$so$只是泛泛而谈,,,等我做了这种题目应该会写题解到时候把题解地址放上来鸭$QwQ$

6)放个学长的总结昂$QwQ$

斜率单调暴力移指针

斜率不单调二分找答案

x坐标单调开单调队列

x坐标不单调开平衡树|cdq分治

7)没什么意义的一个$mk$,,,听说好像能用斜率优化的都能用李超线段树,,,?教练我想学嘤嘤嘤

例题

可以戳这儿$QwQ$

[ ]玩具装箱

[ ]防御准备

[ ]序列分割

[ ]土地购买

[ ]仓库建设

[ ]任务安排

[ ]特别行动队

[ ]BZOJ3437

[ ]BZOJ4518

[ ]货币兑换($cdq$分治/平衡树,,,显然我会咕辽$QAQ$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值