决策单调性 笔记
一、基本概念
1. 一些术语
- 这是一个最小化问题
; - 它的决策集合是
; - 最优决策点
,即取到最小值时 的位置。
2. 四边形不等式
若
则称
四边形不等式成立的一个充要条件:
对于最大化问题,应将
3. 区间单调性
若
则称
4. 决策单调性
设对于一个最大/最小化问题
若对于
则称具有决策单调性。
二、常见形式
1. 1D
(1). 分治类问题
一般而言,
定理一
若
满足四边形不等式,则 满足决策单调性。
证明:反证法。假设对于
,则根据定义 且 ,移项可得 ,即 ,与“ 满足四边形不等式”矛盾。故假设不成立,定理成立。
假设
通过暴力枚举
void work(int l, int r, int kl, int kr) {
if (l > r) return;
int i = l + r >> 1, k = kl;
for (int j = kl; j <= kr; j++)
if (w(j, i) > w(k, i)) k = j;
p[i] = max(p[i], w(k, i));
work(l, i - 1, kl, k);
work(i + 1, r, k, kr);
}(2). 二分队列类问题
需要用二分队列的四边形不等式优化,有一个鲜明的特征:
根据决策单调性,可以知道每一个决策一定都是一段连续区间问题的最优决策点。
因此,设
一开始,一个问题都还没处理,
定义一个单调队列,队列头表示问题
开始处理第
,处理 。 根据决策单调性,如果对于
这个问题,当前的 决策还比以往的 决策要优,那么 决策不再可能成为最优决策,队尾可以弹出了。 将所有在第二步中“整个区间都被弹出”的决策清理掉后,此时队尾的决策对应的问题区间,它的右半部分很有可能也是决策
更优,因此二分在最后的这个问题区间,决策 更优的分界点是哪里,将分界点的左边的问题归给原本队尾的决策。 如果分界点还没有到达
,那么就添加一个 决策最优的 的问题区间。 最后,如果
这一个决策的问题区间右边界就是 ,那么这个决策后面就没用了,从队头弹出。
void work() {
deque<int> q;
q.push_back(0);
lt[0] = 1, rt[0] = n;
for (int i = 1; i <= n; i++) {
f[i] = w(q.front(), i);
while (i < lt[q.back()] and w(i, lt[q.back()]) < w(q.back(), lt[q.back()])) q.pop_back();
int l = max(i, lt[q.back()] - 1), r = rt[q.back()] + 1;
while (l + 1 < r) {
int mid = l + r >> 1;
if (w(i, mid) < w(q.back(), mid)) r = mid;
else l = mid;
}
rt[q.back()] = r - 1;
if (r <= n) {
q.push_back(i);
lt[i] = r, rt[i] = n;
}
while (i == rt[q.front()]) q.pop_front();
}
}2. 2D
(1). 区间分拆问题
令
(2). 区间合并问题
石子合并问题。
定理二
若
满足四边形不等式,则 满足决策单调性。
证明:当
时,定理成立。当 时,原式相当于对若干个四边形不等式求和再取最小值,仍满足四边形不等式。以此类推,可以得到 满足四边形不等式和决策单调性。
定理三
有
。
证明:第二个小于等于号是 1D 情况。对于第一个小于等于号考虑反证法。设
,且 。则有 。可以得到 , 。两式相加得 ,与 是四边形不等式矛盾。故 。
三、刷题总结
真理(并非
事实上,考场上遇到了像是四边形不等式的题,我更愿意写个暴力判断是否满足,但是平时练习还是很需要证明的。
1. P3515 [POI2011] Lightning Conductor / SP9070 LIGHTIN - Lightning Conductor
求:
先简单处理一下:
只要处理出其中一个
设
这是一个最大化问题,接着证明
设
; 。
令
两边同时平方并移项,得
再次两边同时平方,得
分治求即可。
2. P3195 [HNOI2008] 玩具装箱
求:
(
, 已给出。
3. P4767 [IOI 2000] 邮局 加强版
2D 板子。