内容转载自:
《POJ 1160 Post Office》Staginner
《 四边形不等式优化 》Blithe
四边形不等式优化dp(POJ1160)
动态规划算法的优化技巧 毛子青
四边形不等式
=====================
最有代价用d[i,j]表示
d[i,j]=min{
d[i,k−1]+d[k+1,j]+w[i,j]
}
其中
w[i,j]=sum[i,j]
四边形不等式
w[a,c]+w[b,d]<=w[b,c]+w[a,d](a<b<c<d)
就称其满足凸四边形不等式
决策单调性
w[i,j]≤w[i1,j1]([i,j]∈[i1,j1])即i1≤i<j≤j1
于是有以下三个定理
- 定理一: 如果w同时满足四边形不等式 和 决策单调性 ,则d也满足四边形不等式
- 定理二:当定理一的条件满足时,让d[i,j]取最小值的k为K[i,j],则K[i,j-1]<=K[i,j]<=K[i+1,j]
- 定理三:w为凸当且仅当w[i,j]+w[i+1,j+1]<=w[i+1,j]+w[i,j+1]
由定理三知判断w是否为凸即判断 w[i,j+1]-w[i,j]的值随着i的增加是否递减
于是求K值的时候K[i,j]只和K[i+1,j] 和 K[i,j-1]有关,所以可以以i-j递增为顺序递推各个状态值最终求得结果 将O(n^3)转为O(n^2)
证明最优解的集合s满足s[i,j-1]≤s[i,j]≤s[i+1,j]
对 s[i,j−1]≤s[i,j]≤s[i+1,j] 的证明:
设 mk[i,j]=m[i,k]+m[k,j] ,s[i,j]=d
对于任意 k<d ,有 mk[i,j]≥md[i,j] (这里以 m[i,j]=minm[i,k]+m[k,j] 为例,max的类似),接下来只要证明 mk[i+1,j]≥md[i+1,j] ,那么只有当 s[i+1,j]≥s[i,j] 时才有可能有 ms[i+1,j][i+1,j]≤md[i+1,j]
(mk[i+1,j]−md[i+1,j])−(mk[i,j]−md[i,j])
=(mk[i+1,j]+md[i,j])−(md[i+1,j]+mk[i,j])
=(m[i+1,k]+m[k,j]+m[i,d]+m[d,j])−(m[i+1,d]+m[d,j]+m[i,k]+m[k,j])
=(m[i+1,k]+m[i,d])−(m[i+1,d]+m[i,k])
∵m满足四边形不等式,∴对于 i<i+1≤k<d 有 m[i+1,k]+m[i,d]≥m[i+1,d]+m[i,k]
∴ (mk[i+1,j]−md[i+1,j])≥(mk[i,j]−md[i,j])≥0
∴ s[i,j]≤s[i+1,j] ,同理可证 s[i,j−1]≤s[i,j]
POJ 1160
原题链接
下面内容转自毛子青大牛的《动态规划优化技巧》,是我在网上搜到的最详细的答案。为了方便我就放截图了,有兴趣可以点这个链接查看原文。