牛客 倉庫選址 中位數 思維

2021-10-03 03:28:48 字數 1308 閱讀 2018

題目大意:給出乙個 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。輸出格式 輸出乙個整數,表...