鏈結
牛能在某小城有了固定的需求,為了節省送貨的費用,他決定在小城裡建乙個倉庫,但是他不知道選在**,可以使得花費最小。
給出乙個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 行第...