title: 2.邮局选址问题
date: 2023-05-05 16:48:36
categories:
- 大学课程内容
- 大二下
- 算法分析基础
2.邮局选址问题
【问题描述】
对一个以XY轴表达的城市里,n个居民点散乱分布,居民点位置可以用坐标(x,y)表示,任意两点(x1,y1)(x2,y2)间距离可以用| x1-x1|+|y1-y2|度量,居民希望在城市中选择建立邮局的最佳位置,使得n个居民点到邮局的距离总和最小
【输入形式】
居民点数目,以及居民点的坐标
【输出形式】
最小的距离总和
【样例输入】
3
3 3
1 6
4 9
【样例输出】
9
思路
贪心的思想,首先这个问题可以将横纵坐标分开考虑,对答案没影响,则问题转换为在一维坐标轴上面选择一个点,使得所有点到它的距离加起来最小。
放到最中间距离最小,因为假设有两个点AB,需要放置C点,如下:
A C B
A B C
显然放中间距离为AB,放两边距离为AB+BC/AC
代码
n = int(input())
a, b = [], []
for i in range(n):
x, y = map(int, input().split())
a.append(x)
b.append(y)
# 排序
a.sort()
b.sort()
res = 0 # 最优的选择就是放中间
for i in range(n):
res += abs(a[i] - a[n // 2]) + abs(b[i] - b[n // 2])
print(res)