四边形不等式
设
w
(
x
,
y
)
w(x,y)
w(x,y) 是定义在整数集合上的二元函数
若对于定义域上的任意整数
a
,
b
,
c
,
d
,
a,b,c,d,
a,b,c,d,其中
a
≤
b
≤
c
≤
d
a\le b\le c\le d
a≤b≤c≤d
都有
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] 直接出队
根本不需要弄什么三元组