决策单调

四边形不等式

w ( x , y ) w(x,y) w(x,y) 是定义在整数集合上的二元函数
若对于定义域上的任意整数 a , b , c , d , a,b,c,d, abcd其中 a ≤ b ≤ c ≤ d a\le b\le c\le d abcd
都有 w ( a , c ) + w ( b , d ) ≤ w ( a , d ) + w ( b , c ) w(a,c)+w(b,d) \le w(a,d)+w(b,c) w(a,c)+w(b,d)w(a,d)+w(b,c) 成立
则称函数 w w w 满足四边形不等式
简单的说就是 相交小于包含


定理

若对于定义域上的任意整数 a , b a,b a,b,其中 a < b a<b a<b,都有
w ( a , b + 1 ) + w ( a + 1 , b ) ≥ w ( a , b ) + w ( a + 1 , b + 1 ) w(a,b+1)+w(a+1,b)≥w(a,b)+w(a+1,b+1) w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1)
则函数 w w w 满足四边形不等式


决策单调性

d p [ i ] = m i n ( d p [ j ] + w ( j , i ) ) , j ∈ [ 0 , i ) dp[i] = min(dp[j] + w(j, i)),j \in [0,i) dp[i]=min(dp[j]+w(j,i))j[0,i)
若函数 w w w 满足四边形不等式,则 d p dp dp 具有决策单调性

注意:若 d p [ i ] = m a x ( d p [ j ] + w ( j , i ) ) , j ∈ [ 0 , i ) dp[i] = max(dp[j] + w(j, i)),j \in [0,i) dp[i]=max(dp[j]+w(j,i))j[0,i)
则需满足定理 w ( a , b + 1 ) + w ( a + 1 , b ) ≤ w ( a , b ) + w ( a + 1 , b + 1 ) w(a,b+1)+w(a+1,b) \le w(a,b)+w(a+1,b+1) w(a,b+1)+w(a+1,b)w(a,b)+w(a+1,b+1)
也就满足四边形不等式 w ( a , c ) + w ( b , d ) ≥ w ( a , d ) + w ( b , c ) w(a,c)+w(b,d) \ge w(a,d)+w(b,c) w(a,c)+w(b,d)w(a,d)+w(b,c)


规律

如果 d p dp dp 函数没有 d p [ j ] dp[j] dp[j] 这一项,直接分治 Yet Another Minimization Problem
w w w 的导函数是常数,也就是原函数为直线,直接斜率优化

导函数递增、求最大值(柠檬),或者导函数递减、求最小值,要用单调栈
导函数递增、求最小值(诗人小G),或者导函数递减、求最大值(Lightning Conductor),要用单调队列


做法

若用单调队列,设 k [ t a i l ] k[tail] k[tail] 表示 t a i l tail tail t a i l + 1 tail+1 tail+1 两点,在 k [ t a i l ] k[tail] k[tail] 处开始, t a i l + 1 tail+1 tail+1 更优
则需要二分 c a l cal cal 计算 k [ t a i l ] k[tail] k[tail],注意二分的判断
入队时若满足 k[tail-1]>=cal(q[tail], i) ,则 q [ t a i l ] q[tail] q[tail] 直接出队
取最优值时若满足 k[head]<=i,则 q [ h e a d ] q[head] q[head] 直接出队
根本不需要弄什么三元组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值