ACM试题1160 Post Office.pptVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM试题1160 Post Office

Post Office 解题报告杭杰 北京大学信息管理系 Post Office 题目重述 在一条高速公路边上有V个村庄,用一条坐标轴来描述这条公路,每个村庄的坐标各不相同,且都是整数。两个村庄间的距离用他们的坐标值差的绝对值表示。现在要在这些村庄中选出P个建立邮局,邮局建立在村庄里,每个村庄使用离他最近的那个邮局。求一种建设方案,使得所有村庄到各自所使用的邮局的距离总和最小。 Post Office 题目重述 输入: 共两行: 第一行给出村庄数目V和邮局数目P, 1=V=300,1=P=30,P=V; 第二行按递增顺序给出V个村庄的坐标x1,x2,…xV,1=xi=10000。 输出: 共两行: 第一行给出所有村庄到各自所使用的邮局的距离总和S; 第二行按递增顺序给出P个邮局的坐标x1,x2,…xP。 Post Office 算法设计 这是一道典型的动态规划的题目 阶段的划分标准是已安排的邮局数和覆盖的村庄数(所谓“某邮局覆盖的村庄”是指使用该邮局的村庄)。 现以Cost[i,j]表示安排前i个邮局给前j个村庄使用,通过某种安排手段,使这j个村庄分别到这i个邮局中最近的一个的距离之和的所取到的最小值。 Post Office 算法设计 先考虑最简单的情况:Cost[n,1] 设n个村庄的坐标值按递增顺序依次为x1,x2,…xn,邮局坐标为xr,考虑 |xi-xr|+|xn+1-i-xr|=|xi-xn+1-i|. n=2k,|x1-xr|+|x2-xr|+…+|x2k-xr| =|x1-xr|+|x2k-xr|+|x2-xr|+|x2k-1-xr|+… +|xk-xr|+|xk+1-xr| =|x1-x2k|+|x2-x2k-1|+…+|xk-xk+1| 当xr = xk或xr = xk+1时取到最小值 Post Office 算法设计 n=2k-1,|x1-xr|+|x2-xr|+…+|x2k-1-xr| =|x1-xr|+|x2k-1-xr|+|x2-xr|+|x2k-2-xr|+… +|xk-1-xr|+|xk+1-xr|+|xk-xr| =|x1-x2k-1|+|x2-x2k-2|+…+|xk-1-xk+1| 当xr = xk或时取到最小值。 综上, 此时xr = x[n/2],式中[]表示取整。 Post Office 算法设计 现在考虑Cost[n,m],在前n个村庄中建立m个邮局,设最优情况下前m-1个邮局覆盖的范围是第1~r个村庄,第m个邮局覆盖的范围是第r+1~n个村庄,则这两部分邮局的设置都必须是最优的,因此 Cost[n,m]=Cost[r,m-1]+D[r+1,n] 其中D[i,j]表示在第i个到第j个村庄中建立一个邮局得到的最短距离总和。 Post Office 算法设计 对r从1到n遍历,即可求出最优的r值。 由此得到递推关系式: Cost[n,m] = min{Cost[i,m-1]+D[i+1,n]},i=m-1,m,…,n-1。 其中D[i+1,n]的求法与Cost[n,1]类似。 Post Office 程序优化 考虑到Cost[n,m]仅与Cost[i,m-1]相关,可以用两个一维数组存储 D[a,b]可以利用关系式d[a,a]=0, D[a,b]=D[a,b-1]+x[b]-x[(a+b)/2]预先计算存入一个数组。 * *

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档