决策单调性

§ 决策单调性

------j-------i------x----y-----

定义1: f(i)f(i)

在一个数轴上1j<i1 \leqslant j< i,有一个函数G(j,i)G(j,i),表示jjii的贡献,其中最优值,称为f(i)f(i).

f(i)=maxj=iiG(j,i) f(i) = \max_{j =i}^{i} G(j,i)

定义2: 决策单调性

对于1j<i<x<y1 \leqslant j< i < x < y,若G(i,x)G(i,x)优于G(j,i)G(j,i),那么对于y>xy > x,都有G(i,y)G(i,y) 优于 G(j,y)G(j,y)

另一种说法: 若ii对于xx的贡献优于jj对于xx的贡献且j<ij < i,那么对于任意的y>xy>x,ii对于yy的贡献也优于jj对于yy的贡献。这种性质我们称为决策单调性

推论1: p[x]p[x] 存在性

对于i[1,x1]i \in [1,x-1],其中使得G(i,x)G(i,x)最优的点ii为最优决策点。记此时的最优G(i,x)G(i,x)值为f(x)f(x). 可以想到最优决策点必然存在.

那么设p[x]p[x]表示最优G(i,x)G(i,x)ii值,也称xx的决策点,记p[x]=ip[x] = i

推论2: 决策点数组单调不减

G(i,x)G(i,x)满足决策单调性, 那么pp数组是单调不减的,即

  1. 任意两个相邻值,满足: p[x]p[x+1]p[x] \leqslant p[x+1]
  2. 任意两个值x,yx,y,x<yp[x]p[y]x < y \Rightarrow p[x] \leqslant p[y]

证明,使用反证法.

设: p[x]>p[y],x<yp[x] > p[y], x < y,这种情况存在.

--p[y]-- p[x] --x--y--

因为p[x]p[x]xx的最优决策点. 设p[x]=ip[x] = i,则由定义知: j[1,x1]\forall j \in [1,x-1],G(i,x)G(i,x)都要优于G(j,x)G(j,x). 又因为p[x]>p[y]p[x] > p[y].所以p[x]p[x]对于yy的贡献应该优于p[y]p[y]对于yy的贡献. 所以yypp值不应该选择p[y]p[y],至少应该选p[x]p[x],与假设矛盾.所以假设的情况不可以出现.

证明完毕.

推论3: 决策点后续影响

对于每一个决策点aa,都有一个区间[i,j][i,j]或空集,使得x[i,j]x \in [i,j]时,p(x)p(x)的决策点都是aa.这些区间的任意两个不会相交(这个应该是不对的,应该可以相交,当有多个点都是最优决策点的时候.)

证明:

a 要么是最优决策点,要么不是最优决策点.

推论4: 决策点后续影响具有二分性

对于每一个决策点aa,都有一个区间[i,j][i,j]或空集,使得x[i,j]x \in [i,j]时,p(x)p(x)的决策点都是aa.这些区间的任意两个不会相交(这个应该是不对的,应该可以相交,当有多个点都是最优决策点的时候.)

§ 操作1:

一个满足决策单调性的的DP方程,他的时间复杂度是O(nlogn)O(nlogn)

后缀更新操作.

  1. 证明nlog(n)nlog(n)

§ 时间复杂度

队列或栈内的元素只入栈出栈一次,所以这里的时间就要看最多有多少个元素能入栈

可以想到:

  1. 刚开始把0点入栈,
  2. 接着f(1)f(1)产生的点入栈,此时最多有两个点在栈内,产生一个新的点
  3. 接着f(2)f(2)产生的点入栈,此时最多有三个点在栈内,产生一个新的点
  4. \cdots

发生每一次产生一个新的点入栈,那么最多产生nn个点

所以最后的时间为O(n×logn×logn+n)n(logn)2O(n \times logn \times logn + n) \approx n(logn)^2

§ 相关题目

# OJ id title 解析
1 luogu 3195 [HNOI2008] 玩具装箱 解析1