(ACM学习笔记)POJ 1160中四边形不等式的应用

来源:互联网 发布:千手观音知乎 编辑:程序博客网 时间:2024/06/11 18:57

内容转载自:
《POJ 1160 Post Office》Staginner
《 四边形不等式优化 》Blithe
四边形不等式优化dp(POJ1160)
动态规划算法的优化技巧 毛子青


四边形不等式

=====================

最有代价用d[i,j]表示
d[i,j]=min{d[i,k1]+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])i1i<jj1

于是有以下三个定理

  • 定理一: 如果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,j1]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+1k<dm[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,j1]s[i,j]


POJ 1160

原题链接
下面内容转自毛子青大牛的《动态规划优化技巧》,是我在网上搜到的最详细的答案。为了方便我就放截图了,有兴趣可以点这个链接查看原文。

这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击