在乙個按照東西和南北方向劃分成規整街區的城市裡,
n個居民點散亂地分布在不同的街區中。用
x 座標表示東西向,用
y座標表示南北向。各居民點的位置可以由座標
(x,y)
表示。街區中任意2 點
(x1,y1)
和(x2,y2)
之間的距離可以用數值
|x1-x2|+|y1-y2|
度量。居民們希望在城市中選擇建立郵局的最佳位置,使
n個居民點到郵局的距離總和最小。
程式設計任務:
給定n
個居民點的位置
,程式設計計算
n 個居民點到郵局的距離總和的最小值。
輸入由多組測試資料組成。
每組測試資料輸入的第
1 行是居民點數n,
1≤n≤
10000
。接下來
n 行是居民點的位置,每行
2 個整數x 和
y,-10000≤x
,y≤10000。
對應每組輸入,輸出的第
1 行中的數是
n 個居民點到郵局的距離總和的最小值。
51 22 2
1 33 -2
3 3
解題思路:由題意街區中任意2 點
(x1,y1)
和(x2,y2)
之間的距離可以用數值
|x1-x2|+|y1-y2|
度量容易得知,可分別將x、y座標排序求其中位數,即中間的點是到各個居民點最近的,設中位數為d,則個居民點到郵局的距離為|d-x[i](或y[i])|,最後累加求和。
#include #include #include int x[20000];
int y[20000];
int comp(const void *a,const void *b)
int main()
qsort(x,t,sizeof(int),comp);
qsort(y,t,sizeof(int),comp);
for(int i=0;iprintf("%d\n",sum);
}}
郵局選址問題
描述 在乙個按照東西和南北方向劃分成規整街區的城市裡,n個居民點散亂地分布在不同的街區中。用x 座標表示東西向,用y座標表示南北向。各居民點的位置可以由座標 x,y 表示。街區中任意2 點 x1,y1 和 x2,y2 之間的距離可以用數值 x1 x2 y1 y2 度量。居民們希望在城市中選擇建立郵局...
郵局選址問題 分治
問題描述 在乙個按照東西和南北方向劃分成規整街區的城市裡,n個居民點散亂地分布在不同的街區中。用x座標表示東西向,用y座標表示南北向。各居民點的位置可以由座標 x,y 表示。要求 為建郵局選址,使得n個居民點到郵局之距離的總和最小。以檔案輸入形式進行測試。思路 運用分治思想。將居民點的座標從輸入檔案...
動態規劃 郵局選址問題
題目 有一條公路經過 個村莊,每乙個村莊都處在整數的座標點上 這裡假設公路為數軸 規劃在這條公路上建立 個郵局,每乙個郵局都要建在某個村莊上,要求讓不同村莊的人到郵局要走的總路程最小。分析 用動態規劃的辦法,先把輸入的村莊排序,然後計算只有乙個郵局的情況,然後再根據已有的資訊,計算p p 2 個郵局...