决策单调性
------j-------i------x----y-----
定义1: f(i)
在一个数轴上1⩽j<i,有一个函数G(j,i),表示j对i的贡献,其中最优值,称为f(i).
f(i)=j=imaxiG(j,i)
定义2: 决策单调性
对于1⩽j<i<x<y,若G(i,x)优于G(j,i),那么对于y>x,都有G(i,y) 优于 G(j,y)。
另一种说法: 若i对于x的贡献优于j对于x的贡献且j<i,那么对于任意的y>x,i对于y的贡献也优于j对于y的贡献。这种性质我们称为决策单调性。
推论1: p[x] 存在性
对于i∈[1,x−1],其中使得G(i,x)最优的点i为最优决策点。记此时的最优G(i,x)值为f(x). 可以想到最优决策点必然存在.
那么设p[x]表示最优G(i,x)的i值,也称x的决策点,记p[x]=i
推论2: 决策点数组单调不减
若G(i,x)满足决策单调性, 那么p数组是单调不减的,即
- 任意两个相邻值,满足: p[x]⩽p[x+1]。
- 任意两个值x,y,x<y⇒p[x]⩽p[y]
证明,使用反证法.
设: p[x]>p[y],x<y,这种情况存在.
--p[y]-- p[x] --x--y--
因为p[x]是x的最优决策点. 设p[x]=i,则由定义知: ∀j∈[1,x−1],G(i,x)都要优于G(j,x).
又因为p[x]>p[y].所以p[x]对于y的贡献应该优于p[y]对于y的贡献.
所以y的p值不应该选择p[y],至少应该选p[x],与假设矛盾.所以假设的情况不可以出现.
证明完毕.
推论3: 决策点后续影响
对于每一个决策点a,都有一个区间[i,j]或空集,使得x∈[i,j]时,p(x)的决策点都是a.这些区间的任意两个不会相交(这个应该是不对的,应该可以相交,当有多个点都是最优决策点的时候.)
证明:
a 要么是最优决策点,要么不是最优决策点.
推论4: 决策点后续影响具有二分性
对于每一个决策点a,都有一个区间[i,j]或空集,使得x∈[i,j]时,p(x)的决策点都是a.这些区间的任意两个不会相交(这个应该是不对的,应该可以相交,当有多个点都是最优决策点的时候.)
操作1:
一个满足决策单调性的的DP方程,他的时间复杂度是O(nlogn)
后缀更新操作.
- 证明nlog(n)
时间复杂度
队列或栈内的元素只入栈出栈一次,所以这里的时间就要看最多有多少个元素能入栈
可以想到:
- 刚开始把0点入栈,
- 接着f(1)产生的点入栈,此时最多有两个点在栈内,产生一个新的点
- 接着f(2)产生的点入栈,此时最多有三个点在栈内,产生一个新的点
- ⋯
发生每一次产生一个新的点入栈,那么最多产生n个点
所以最后的时间为O(n×logn×logn+n)≈n(logn)2
相关题目
| # |
OJ |
id |
title |
解析 |
| 1 |
luogu |
3195
|
[HNOI2008] 玩具装箱 |
解析1
|