前言
我真的是愚不可及,为什么学这个东西,我本身又不强,而这个东西不但特别难,而且还特别冷门,我真的是白瞎了这么多时间了,现在我把我的辛苦展现出来,给各位强者铺个道路。
四边形不等式
(以下所有的自变量的讨论均在整数范围内,设w(a,b)为关于a,b的二元函数)
定义
若二元函数满足当a≤b≤c≤d,有w(a,d)+w(b,c)≥w(a,c)+w(b,d),则称二元函数满足四变形不等式。
四边形不等式判定定理
若a<b,w(a,b+1)+w(a+1,b)≥w(a,b)+w(a+1,b+1),则二元函数w满足四变形不等式。
证明:
对于a<c,一定有
w(a,c+1)+w(a+1,c)≥w(a,c)+w(a+1,c+1)
假设a+k<c,会有
w(a+k,c+1)+w(a+k+1,c)≥w(a+k,c)+w(a+k+1,c+1)
同理a+k+1<c,有
w(a+k+1,c+1)+w(a+k+2,c)≥w(a+k+1,c)+w(a+k+2,c+1)
两式相加有
w(a+k,c+1)+w(a+k+2,c)≥w(a+k,c)+w(a+k+2,c+1)
于是由数学归纳法,加之a,b可以取等号,有
a≤b≤c,w(a,c+1)+w(b,c)≥w(a,c)+w(b,c+1)
同理,对于
a≤b<c+k,有
w(a,c+k+1)+w(b,c+k)≥w(a,c+k)+w(b,c+k+1)
至于a≤b<c+k+1
w(a,c+k+2)+w(b,c+k+1)≥w(a,c+k+1)+w(b,c+k+2)
两式相加有
w(a,c+k+2)+w(b,c+k)≤w(a,c+k)+w(b,c+k+2)
由数学归纳法,加之c,d可以取等号,有
a≤b≤c≤d,w(a,d)+w(b,c)≤w(a,c)+w(b,d)
得证
推论:
- 对于b−a≤l满足判定定理要求,那么对于a≤b≤c≤d,当d−a≤l+1时满足四边形不等式,根据证明来证明。
- 判定定理的逆定理:满足四边形不等式的二元函数满足a<b,w(a+1,b)+w(a,b+1)≥w(a,b)+w(a+1,b+1),有兴趣可以自行证明。
一维线性递推优化
优化式
fi=min0≤j<i{fj+w(j,i)}
性质
一维线性递推决策递增定理
定义
方程fi=min0≤j<i{fj+w(j,i)}中w满足四边形不等式,则决策点单调递增
证明
设k,k′为fi的决策点并满足条件0≤k′<k<i<i′,其中k为i的最优决策点
不难得知
fi=fk+w(k,i)≤fk′+w(k′,i)
由四边形不等式得知
w(k′,i′)+w(k,i)≥w(k′,i)+w(k,i′)
两式相加有
fk+w(k,i′)≤fk′+w(k′,i′)
于是易知决策点k比k′更优,故得证。
推论:如果一个决策点a比它之前的一个决策点b优秀,则决策点b不可能成为以后的最优决策点(二分依据)。
实现
目前要求fi
- 单调队列维护三元组(l,r,p),表示fl−r的最优决策点目前最优是p
- 队头是否合法,即l<r,否则弹出
- 取队头l++,计算fl最优解
- 从队尾向前枚举,如果计算fk(k为队尾的l)的已有决策点不如现在的决策点l优秀,弹出
- 否则二分查找l−r中第一个可以让决策点i更优秀的位置
- 更改队尾r,把新的三元组代表i的决策加入队列(注意,如果不能加入,一定要剔除)
二维递推优化
优化式
- f[l][r]=minl≤k<r{f[l][k]+f[k+1][r]+w[l][r]}(区间递推)
- f[i][j]=mini−1≤k<j{f[i−1][k]+w[k+1][j]}(序列划分)
包含单调
如果二元函数w满足a≤b≤c≤d,w(a,d)≥w(b,c),则称二元函数w满足包含单调。
二维递推判定定理
定义
对于上述优化式,如果满足
- 二元函数w满足四边形不等式
- 二元函数w满足包含单调
- 边界w(i,i)=f[i][i]=0
则f满足四边形不等式。
证明
优化式1
对于j−i=1而言,显然有f[i][j]=f[i][i]+f[j][j]+w[i][j]
根据判定定理来证明,i<j,要证明f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
而f[i][j+1]+f[i+1][j]=f[i][j+1]
- f[i][j+1]最优决策点在i
那么有f[i][j+1]=f[i][i]+f[i+1][j+1]+w[i][j+1]=f[i+1][j+1]+w[i][j+1]≥w[i][j]+f[i+1][j+1]
=f[i][j]+f[i+1][j+1],即i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]。
- f[i][j+1]最优决策点在i+1
那么有f[i][j+1]=f[i][i+1]+f[i+1][j]+w[i][j+1]=f[i][j]+w[i][j+1]≥f[i][j]+w[i+1][j+1]=
f[i][j]+f[i+1][j+1],即i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]。
总上所素,j-i=1时满足四边形不等式
至于j−i=l,假设j−i<l满足四边形不等式,则要证
i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
不妨设f[i][j+1]最优决策点为x,f[i+1][j]最优决策点为y
而f[i][j+1]+f[i+1][j]=f[i][x]+f[x+1][j+1]+w[i][j+1]+f[i+1][y]+f[y+1][j]+w[i+1][j]
而f[i][j]+f[i+1][j+1]≤f[i][x]+f[x+1][j]+w[i][j]+f[i+1][y]+f[y+1][j+1]+w[i+1][j+1]
显然我们有i<j,w[i][j+1]+w[i+1][j]≥w[i][j]+w[i+1][j+1]
显然x+1≤y+1≤j<j+1,因此我们有
f[x+1][j+1]+f[y+1][j]≥f[x+1][j]+f[y+1][j+1]
于是不难得知i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
同理
f[i][j+1]+f[i+1][j]=f[i][x]+f[x+1][j+1]+w[i][j+1]+f[i+1][y]+f[y+1][j]+w[i+1][j]
f[i][j]+f[i+1][j+1]≤f[i][y]+f[y+1][j]+w[i][j]+f[i+1][x]+f[x+1][j+1]+w[i+1][j+1]
显然有i<j,w[i][j+1]+w[i+1][j]≥w[i][j]+w[i+1][j+1]
i<i+1≤y<x,f[i][x]+f[i+1][y]≥f[i][y]+f[i+1][x]
因此i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
总上所素,根据数学归纳法易知i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1],又有四边形不等式判定定理容易知道,f满足四边形不等式。
优化式2
对于j−i=0
现在需要证明f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1],
即证f[i][i+1]+f[i+1][i]≥f[i][i]+f[i+1][i+1]
即f[i][i+1]+f[i+1][i]≥0,不妨将非法决策定义为0,于是即证f[i][i+1]≥0,显然成立
至于j−i=l,假设j−i<l满足四边形不等式,那么要证
i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
设f[i][j+1]最优决策点为x,f[i+1][j]最优决策点为y
易知f[i][j+1]+f[i+1][j]=f[i−1][x]+w[x+1][j+1]+f[i][y]+w[y+1][j]
- x≤y⇒i−1≤x≤y<j
显然f[i][j]+f[i+1][j+1]≤f[i−1][x]+w[x+1][j]+f[i][y]+w[y+1][j+1]
而x+1<y+1≤j<j+1,w[x+1][j+1]+w[y+1][j]≥w[x+1][j]+w[y+1][j+1]
故i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
显然f[i][j]+f[i+1][j+1]≤f[i−1][y]+w[y+1][j]+f[i][x]+w[x+1][j+1]
而i−1<i≤y<x,f[i−1][x]+f[i][y]≥f[i−1][y]+f[i][x]
故i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1]
所以由数学归纳法i<j,f[i][j+1]+f[i+1][j]≥f[i][j]+f[i+1][j+1],结合四边形不等式判定定理,不难得知原命题成立。
二维递推决策递增定理
定义
若上诉优化式满足判定定理,设p[i][j]为f[i][j]的最优决策点,则有p[l][r−1]≤p[l][r]≤p[l+1][r]
证明
优化式1
- p[l][r−1]≤p[l][r]
设左式最优决策点k,并设l≤k′<k<r−1,所以我们有
f[l][r−1]=f[l][k]+f[k+1][r−1]+w[l][r−1]≤
f[l][k′]+f[k′+1][r−1]+w[l][r−1]
即f[l][k]+f[k+1][r−1]≤f[l][k′]+f[k′+1][r−1].....1
由四边形不等式有
l<k′+1<k+1≤r−1<r
f[k′+1][r]+f[k+1][r−1]≥f[k′+1][r−1]+f[k+1][r].....2
1,2式相加,有
f[l][k]+f[k+1][r]≤f[l][k′]+f[k′+1][r]
即
f[l][k]+f[k+1][r]+w[l][r]≤f[l][k′]+f[k′+1][r]+w[l][r]
所以易知决策点k比k′优秀,得证
- p[l][r]≤p[l+1][r]
设右式的最优决策点为k,设l≤k<k′<r
显然l<l+1≤k<k′,f[l][k′]+f[l+1][k]≥f[l][k]+f[l+1][k′] ......1
而f[l+1][r]=f[l+1][k]+f[k+1][r]+w[l+1][r]≤f[l+1][k′]+f[k′+1][r]+w[l+1][r]
即f[l+1][k]+f[k+1][r]≤f[l+1][k′]+f[k′+1][r] ......2
1式+2式我们有
f[l][k′]+f[k′+1][r]≥f[l][k]+f[k+1][r],即
f[l][k′]+f[k′+1][r]+w[l][r]≥f[l][k]+f[k+1][r]+w[l][r]
- 总上所素,有p[l][r−1]≤p[l][r]≤p[l+1][r]。
优化式2
- p[l][r−1]≤p[l][r]
设l−1≤k′<k=p[l][r−1]<r−1
易知f[l][r−1]=f[l−1][k]+w[k+1][r−1]≤f[l−1][k′]+w[k′+1][r−1]
由四边形不等式有k′+1<k+1≤r−1<r,w[k′+1][r−1]+w[k+1][r]≤w[k+1][r−1]+w[k′+1][r]
两式相加f[l−1][k]+w[k+1][r]≤f[l−1][k′]+w[k′+1][r],易知决策点k比k′更优秀
- p[l][r]≤p[l+1][r]
设l≤k=p[l+1][r]<k′<r,容易知道
f[l+1][r]=f[l][k]+w[k+1][r]≤f[l][k′]+w[k′+1][r]
由四边形不等式有l−1<l≤k<k′,f[l][k′]+f[l−1][k]≤f[l][k]+f[l−1][k′]
两式相加f[l−1][k]+w[k+1][r]≤f[l−1][k′]+w[k′+1][r],容易知道决策点k比k′更优秀
- 总上所素p[l][r−1]≤p[l][r]≤p[l+1][r]。
时间复杂度
根据二维递推决策递增定理,我们知道时间复杂度应该为O(∑ni=2∑n−i+1l=1(p[l+1][l+i−1]−p[l][l+i−2]+1))=
O(∑ni=2(p[2][i]+p[3][i+1]+...+p[n−i+2][n])−(p[1][i−1]+p[2][i]+...+p[n−i+1][n−1])+n−i+1))
=O(∑ni=2(p[n−i+2][n]−p[1][i−1]+n−i+1))≈O(n2)
石子合并
问题
有n堆石子从左至右排成一排,第i堆石子重量w[i],每次可以选择相邻的两堆石子合并,新的石子重量为原来两堆之和,消耗体力值为新的石子的重量,询问最少消耗的体力之和。
解
首先注意到这是区间问题,于是可以设f[l][r]表示合并第l堆石子到第r堆石子消耗的最少体力值,于是有f[l][r]=minr−1k=l{f[l][k]+f[k+1][r]+w[l][r]},时间复杂度O(n3)。
考虑到区间递推可以四边形不等式优化,发现w满足四边形不等式,且取到等号,也满足包含递增关系,边界可以开为0,因此可以使用四边形不等式优化成O(n2)。
梳理:4大定理三个推论
定理名称 |
式子 |
条件 |
结果 |
四边形不等式判定定理(2个推论) |
w(a,b+1)+w(a+1,b)≥w(a,b)+w(a+1,b+1) |
a<b |
w满足四边形不等式 |
一维线性递推决策递增定理(1个推论) |
fi=mini−1j=0{fj+w(i,j)} |
w满足四边形不等式 |
f的最优决策点单调递增 |
二维递推判定定理 |
⎧⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪⎩f[l][r]=minr−1k=l{f[l][k]+f[k+1][r]+w[l][r]}f[i][j]=mini−1≤k<j{f[i−1][k]+w[k+1][j]} |
w满足四边形不等式,包含递增,w[i][i]=f[i][i]=0 |
f满足四边形不等式 |
二维递推决策递增定理 |
⎧⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪⎩f[l][r]=minr−1k=l{f[l][k]+f[k+1][r]+w[l][r]}f[i][j]=mini−1≤k<j{f[i−1][k]+w[k+1][j]} |
优化式满足判定定理 |
最优决策点p[l][r−1]≤p[l][r]≤p[l+1][r] |
式子积累
-
f(x)=|x+c|p−|x|p单调递增,[NOI2009]诗人小G
-
w(l,r)表示序列l,r中元素到其中位数的距离之和的最小值,满足四边形不等式和包含递增,Post Office
-
w(l,r)=sr−sl(s表示序列前缀和),满足四边形不等式且取到等号和包含递增。(石子合并)
例题
神仙
有n座山,第i座山坐标xi,定义A[i][j]表示在前j座山修i间房子每座山到房子的距离之和的最小值,现在有两个神仙玩起了石子合并,有n堆石子,第i堆石子质量ai,定义合并两堆石子的代价为两堆石子质量之和+A[l][r](l,r为合并后的石子最小的编号和最大的编号),求合并成一堆石子最小的代价,n≤3000。
后记
我想,当强者你看完这一切,觉得这些东西十分简单,而我的前言中又说这个东西很难,那么你大概知道了我的命运了,君当益AK,吾独AFO。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】