題目大意:給出乙個 n * m 的矩陣,每個格仔中都有乙個數字,代表需要運貨的次數,現在需要選出乙個點作為倉庫,使得累計運貨的路程最短
題目分析:真沒想到資料水到能讓 n^4 的演算法水過去,多的就不說了,一會會掛暴力的頭鐵**的
重點想說一下如何用中位數解決這個問題,關於中位數處理類似的一維問題,我們只需要求出 x 軸上的中位數,選取該位置作為倉庫肯定是最優的了,那麼在二維平面該如何選擇呢,其實也是同理,我們只需要沿著行開始遍歷,確定下來 x 的座標,然後再沿著列開始遍歷,確定下來 y 的座標,這樣就可以確定下來倉庫的具體位置,剩下的 n^2 計算出答案就好了
**:
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int n=110;
ll a[n][n];
int main()
int x,y;
ll mid=sum+1>>1;
ll now=0;
for(int i=1;i<=n;i++)
} now=0;
for(int j=1;j<=m;j++)
}ll ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans+=a[i][j]*(abs(i-x)+abs(j-y));
printf("%lld\n",ans);
}
return 0;
}
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const int n=110;
ll a[n][n];
int main()
printf("%lld\n",ans);
}return 0;
}
貨倉選址(中位數)
描述 在一條數軸上有n家商店,它們的座標分別為 a 1 a n 現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行乙個整數n,第二行n個整數a 1 a n 輸出格式 乙個整數,表示距離之和的...
CH 0501 貨倉選址 中位數
題目大意 在一條數軸上有n家商店,它們的座標分別為 a 1 a n 現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。題目分析 中位數應用最經典的問題之一了,我們設應該將貨倉建立在座標x處,現在x左邊有p家...
演算法高階指南 104 貨倉選址 中位數
在一條數軸上有 nn 家商店,它們的座標分別為 a1a1 anan。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個整數a1a1 anan。輸出格式 輸出乙個整數,表...