斜率优化

什么是斜率优化?

通常我们在做动态规划的时候,会遇到如下形式的方程

$\Large f(i)=min(f(j)+w(j,i))$

对于i来说,什么时候取j比取t要好呢?

显然是当$f(j)+w(j,i)\le f(t)+w(t,i)$时

如果我们可以将式子化简成$\large\frac{A(j)-A(t)}{B(j)-B(t)}\le C(i)$(一侧与i无关,一侧只与i有关)的形式,且C是单调的

设$value(t,j)=\large\frac{A(j)-A(t)}{B(j)-B(t)}$

我们就可以维护一个关于value的单调队列从而快速求出i的决策

具体做法

每次向队列中加入一个元素时,算一下它和队尾元素的value

如果这个值$\le$队尾和队中倒数第二个元素的value就弹出队尾元素
(当队尾元素比队中倒数第二个元素优时,要加入的元素就已经比队尾元素优了)

如果队首两个元素的value$\le$当前的C(i)时,弹出第一个元素

名字来源

如果我们把(A(j),B(j))当成二维平面上的一个点

那么value就是两个点直线的斜率

单调队列中相邻两个点的斜率是单调递增的,如下图

其实就是维护了一个下凸壳,所以说是斜率优化

例题

BZOJ1010: [HNOI2008]玩具装箱toy     思路

HDU3480 Division                                思路

BZOJ1096: [ZJOI2007]仓库建设           思路

BZOJ1597: [Usaco2008 Mar]土地购买 思路

转载于:https://www.cnblogs.com/bennettz/p/9080933.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值