【学习笔记】决策单调性

前言

只是简单地写一写,并不是什么很详细的解说。 d p \tt dp dp 这东西还是要多做题。

为何单调

单调队列 / / / 单调栈 / / / 斜率优化

不讲。给一个单调队列例题,题解在这里

平行四边形

其实主要就想讲这一个

形如 f ( i ) = min ⁡ j = 0 i − 1 f ( j ) + w ( j , i ) f(i)=\min_{j=0}^{i-1}f(j)+w(j,i) f(i)=minj=0i1f(j)+w(j,i) 的一维 d p \tt dp dp 决策单调性的充要条件:对于 a < b < c < d a<b<c<d a<b<c<d

  • 如果 f ( a ) + w ( a , c ) ≥ f ( b ) + w ( b , c ) f(a)+w(a,c)\ge f(b)+w(b,c) f(a)+w(a,c)f(b)+w(b,c)(即,在决策 c c c b b b 更优)
  • f ( a ) + w ( a , d ) ≥ f ( b ) + w ( b , d ) f(a)+w(a,d)\ge f(b)+w(b,d) f(a)+w(a,d)f(b)+w(b,d)(即,在决策 d d d b b b 仍然更优)

把上面的式子翻译一下,等价于
f ( a ) − f ( b ) ≥ w ( b , c ) − w ( a , c ) ⇒ f ( a ) − f ( b ) ≥ w ( b , d ) − w ( a , d ) \begin{aligned} f(a)-f(b)&\ge w(b,c)-w(a,c)\\ \Rightarrow f(a)-f(b)&\ge w(b,d)-w(a,d) \end{aligned} f(a)f(b)f(a)f(b)w(b,c)w(a,c)w(b,d)w(a,d)
那就有一个决策单调性的 充分条件
w ( b , c ) − w ( a , c ) ≥ w ( b , d ) − w ( a , d ) ⇔    w ( a , d ) + w ( b , c ) ≥ w ( a , c ) + w ( b , d ) w(b,c)-w(a,c)\ge w(b,d)-w(a,d)\\ \Leftrightarrow\;w(a,d)+w(b,c)\ge w(a,c)+w(b,d) w(b,c)w(a,c)w(b,d)w(a,d)w(a,d)+w(b,c)w(a,c)+w(b,d)

即大名鼎鼎的平行四边形不等式(交叉优于包含)。它有一个 充要条件 i < j i<j i<j
w ( i , j + 1 ) + w ( i + 1 , j ) ≥ w ( i , j ) + w ( i + 1 , j + 1 ) w(i,j+1)+w(i+1,j)\ge w(i,j)+w(i+1,j+1) w(i,j+1)+w(i+1,j)w(i,j)+w(i+1,j+1)

大名鼎鼎的 列的差值在行上递减。因为其移项得到
w ( i , j + 1 ) − w ( i , j ) ≥ w ( i + 1 , j + 1 ) − w ( i + 1 , j ) w(i,j+1)-w(i,j)\ge w(i+1,j+1)-w(i+1,j) w(i,j+1)w(i,j)w(i+1,j+1)w(i+1,j)
也即 b − a = d − c = 1 b-a=d-c=1 ba=dc=1 时的平行四边形不等式,必要性显然了。证明一下充分性。
∑ j = c d − 1 [ w ( i , j + 1 ) − w ( i , j ) ] ≥ ∑ j = c d − 1 [ w ( i + 1 , j + 1 ) − w ( i + 1 , j ) ] ⇔ w ( i , d ) − w ( i , c ) ≥ w ( i + 1 , d ) − w ( i + 1 , c ) ⇔ w ( i , d ) − w ( i + 1 , d ) ≥ w ( i , c ) − w ( i + 1 , c ) ⇒ ∑ i = a b − 1 [ w ( i , d ) − w ( i + 1 , d ) ] ≥ ∑ i = a b − 1 [ w ( i , c ) − w ( i + 1 , c ) ] ⇔ w ( a , d ) − w ( b , d ) ≥ w ( a , c ) − w ( b , c ) ⇔ w ( a , d ) + w ( b , c ) ≥ w ( a , c ) + w ( b , d ) \begin{aligned} \sum_{j=c}^{d-1}\big[w(i,j+1)-w(i,j)\big] &\ge \sum_{j=c}^{d-1}\big[w(i+1,j+1)-w(i+1,j)\big]\\ \Leftrightarrow w(i,d)-w(i,c) &\ge w(i+1,d)-w(i+1,c)\\ \Leftrightarrow w(i,d)-w(i+1,d) &\ge w(i,c)-w(i+1,c)\\ \Rightarrow\sum_{i=a}^{b-1}\big[w(i,d)-w(i+1,d)\big] &\ge \sum_{i=a}^{b-1}\big[w(i,c)-w(i+1,c)\big]\\ \Leftrightarrow w(a,d)-w(b,d) &\ge w(a,c)-w(b,c)\\ \Leftrightarrow w(a,d)+w(b,c) &\ge w(a,c)+w(b,d) \end{aligned} j=cd1[w(i,j+1)w(i,j)]w(i,d)w(i,c)w(i,d)w(i+1,d)i=ab1[w(i,d)w(i+1,d)]w(a,d)w(b,d)w(a,d)+w(b,c)j=cd1[w(i+1,j+1)w(i+1,j)]w(i+1,d)w(i+1,c)w(i,c)w(i+1,c)i=ab1[w(i,c)w(i+1,c)]w(a,c)w(b,c)w(a,c)+w(b,d)

所以不需要对于任意 a , b , c , d a,b,c,d a,b,c,d 判断,只需要判定 ⟨ i , i + 1 , j , j + 1 ⟩ \langle i,i+1,j,j+1\rangle i,i+1,j,j+1 即可。

如果 w ( l , r ) w(l,r) w(l,r) 只跟区间内信息有关,区间信息又具有可加性,并且均为 “正数”,那么 w w w 为凸函数即满足决策单调性。证明就可以大家自己推导了。

二维 d p \tt dp dp 呢?一般性的二维 d p \tt dp dp 我也不会优化。不过,如果其中一维是 “个数”,即形如
f ( i , j ) = min ⁡ k = 0 j − 1 f ( i − 1 , k ) + w ( k , j ) + ω ( i ) f(i,j)=\min_{k=0}^{j-1}f(i-1,k)+w(k,j)+\omega(i) f(i,j)=k=0minj1f(i1,k)+w(k,j)+ω(i)
那就还有回旋的余地。因为根据上面的过程可知,只要 w w w 满足平行四边形不等式,决策点在同行上仍然单调。

另一种特殊的二维 d p \tt dp dp 是区间 d p \tt dp dp 。形如
f ( i , j ) = w ( i , j ) + min ⁡ k = i j − 1 f ( i , k ) + f ( k + 1 , j ) f(i,j)=w(i,j)+\min_{k=i}^{j-1}f(i,k)+f(k+1,j) f(i,j)=w(i,j)+k=iminj1f(i,k)+f(k+1,j)
不妨设 w ( i , j ) w(i,j) w(i,j) 仍然满足平行四边形不等式。我们可以证明, f ( i , j ) f(i,j) f(i,j) 也满足平行四边形不等式,并且其决策点 s ( i , j ) s(i,j) s(i,j) 满足
s ( i , j − 1 ) ≤ s ( i , j ) ≤ s ( i + 1 , j ) s(i,j-1)\le s(i,j)\le s(i+1,j) s(i,j1)s(i,j)s(i+1,j)
我不会证明。可以看看百度百科怎么证明的。但是我证明不了 f f f 满足平行四边形不等式……

利用单调

二分

用一个栈存储所有决策点。相邻的决策点之间,用二分找到分界点 x x x(即, i ≤ x i\le x ix 则应当从 a a a 转移, i > x i>x i>x 则应当从 b b b 转移),如果一个决策点没有任何生存空间,出栈。

分治

有的问题需要的信息,与整体二分是类似的:扫描整个序列可以处理所有询问,但是对于单个询问不能亚线性直接处理。

考虑对于 m i d mid mid 直接扫描整个序列求出其决策点,然后左右分别递归。一个细节是,递归时要保证复杂度不超过 O ( \mathcal O( O( 决策点区间长度 + + + 需要求解的区间长度 ) ) ),所以决策点区间与求解区间没有交集的时候,要在递归前加入二者之间的罅隙。

比如这道题就是一个很好的例子。

2021 / 11 / 15    u p d a t e \tt 2021/11/15\;update 2021/11/15update:事实上,直接模拟莫队,维护当前的 l , r l,r l,r 端点并移动即可。上面的论述已经足以说明它的复杂度是正确的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值