倉庫選址 二維字首和,距離和問題

2021-10-22 06:51:38 字數 1866 閱讀 1932

鏈結

牛能在某小城有了固定的需求,為了節省送貨的費用,他決定在小城裡建乙個倉庫,但是他不知道選在**,可以使得花費最小。

給出乙個m \times nm×n的矩陣,代表下一年小城裡各個位置對貨物的需求次數。我們定義花費為貨車載貨運輸的距離,貨車只能沿著水平或豎直方向行駛。

首先在一行中輸入t ,t≤10,代表測試資料的組數。

每組輸入在第一行給出兩個正整數n, m,1≤n,m≤100,分別代表矩陣的寬和高。

接下來m行,每行n個不超過1000的數字,代表矩陣裡的元素。

每組輸入在一行中輸出答案。

32 2

1 11 0

4 40 8 2 0

1 4 5 0

0 1 0 1

3 9 2 0

6 70 0 0 0 0 0

0 1 0 3 0 1

2 9 1 2 1 2

8 7 1 3 4 3

1 0 2 2 7 7

0 1 0 0 1 0

0 0 0 0 0 0255

162備註:

送貨時只能單次運輸,若該位置需要3次,貨車必須跑3次。

即使該位置需要被送貨,我們仍然可以選擇該位置作為倉庫。

這道題的資料比較弱,可以暴力解決,正解的話,會用到二維字首和,二維字首和的做法比如我們當前在(x,y)選為倉庫,當(x,y+1)選為倉庫的時候,那麼左上角為(1,1)到右下角(n,y)的子矩陣到該點的距離都增加了 1,而左上角為(x,y+1)到右下角(n,m)的子矩陣就減少了 1.減少或增加的總距離就是子矩陣的字首和.所以我們算出(1,1)到(n,m)的代價和,之後移動點,算出最小距離

暴力做法

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e2+5;

typedef

long

long ll;

int t,n,m;

int map[maxn]

[maxn]

;int dis,res;

intslove

(int x,

int y)

}return dis;

}int

main()

cout<}return0;

}

二維字首和做法

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e2+5;

typedef

long

long ll;

int t,n,m;

int map[maxn]

[maxn]

;int s[maxn]

[maxn]

;int dis,res;

intcol

(int a,

int b,

int c,

int d)

intmain()

int res=

0x3f3f3f3f

;int tt;

for(

int i=

1;i<=n;i++

) tot+

=col(1

,1,i,m)

-col

(i+1,1

,n,m);}

cout<}}

二維字首和

時間限制 1 sec 記憶體限制 128 mb 提交 155 解決 51 提交 狀態 討論版 命題人 admin 題目描述 一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 10000 個目標,用整數xi,yi 0 xi,yi 5000 表示目標在地圖上的位置,每個...

二維字首和

1 二維字首和 模板 二維字首和 模板題 acwing 796.子矩陣的和 s i,j 第i行j列格仔左上部分所有元素的和 1.以 x1,y1 為左上角,x2,y2 為右下角的子矩陣的和為 s x2 y2 s x1 1 y2 s x2 y1 1 s x1 1 y1 1 s x y s x y 1 s...

二維字首和

直接看乙個例子 假設給定乙個矩陣 1 2 4 3 5 1 2 4 6 3 5 9 那麼,可以推出他的二維字首和矩陣為 1 3 7 10 691522 121829 45 在二維字首和陣列中,9 1 2 5 1 15 1 2 5 1 4 2 18 1 5 6 2 1 3 即二位字首和陣列中第 i 行第...