POJ1160 P个邮局N个村庄求最短总距离

有意思的一道题,N个一维坐标点上的村庄中选择P个村庄建邮局,要使总距离最短。用DP方法做, 在第0个村庄(升序)到第i个村庄建立j个邮局的最少总距离,是在第0个到第i个任取第j个点,第0个到第k个之间建立j-1个邮局的最少总距离加上在第(k+1)个到第i个村庄建立一个邮局的总距离之和的最小值(用形式化语言描述更清晰)。
第i个村庄到第j个村庄建立1个邮局的最小总距离是容易求的。这个邮局应建在(i+j)/2处。假定中点只有一个,即j-i为偶数,不论邮局建在何处,关于中心点对称的两个村庄到邮局的总距离最短是邮局建在中间那点此时总距离是两个村庄的距离和,把这些值累加仍然是最小,只需满足邮局在中点。j-i为奇数也是一样的。另外在两个关于中心点对称的位置建邮局距离和是一样的。代码中计算sin[i][j]时用了简单的计算方法,就是这个道理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值