description
給定乙個n*m的矩陣a,求a中的乙個非空子矩陣,使這個子矩陣中的元素和最大。
其中,a的子矩陣指在a中行和列均連續的一塊。
input
輸入的第一行包含兩個整數n, m,分別表示矩陣a的行數和列數。(1 ≤ n, m ≤ 500)
接下來n行,每行m個整數,表示矩陣a。
output
輸出一行,包含乙個整數,表示a中最大的子矩陣中的元素和。
sample input
3 3
-1 -4 3
3 4 -1
-5 -2 8
sample output10
字首和優化可以降低乙個數量級
用s[i][j]表示第j列的 前i行元素的和
比如:對於樣例的第三列,s[1][3] = 3, s[2][3] = (3)+(-1) = 2,s[3][3] = (3)+(-1)+(8)=10
我們可以o(1)地找到一列的元素和,比如:
第三列後兩個元素和,就是s[3][3]-s[1][3] = 10-3=7
整個第三列的元素和,就是s[3][3]-s[0][3] = 10
對於矩陣元素全為負的情況,直接輸出矩陣中最大的數
對於矩陣元素存在正值的情況,是乙個二維的lis(最長上公升子串行)問題,當前和為負時則置當前和為0
#include
#include
using namespace std;
const
int maxn =
505;
const
int inf =
0x3f3f3f3f
;int s[maxn]
[maxn]
;// s[i][j]:第j列的前i行元素字首和
int g[maxn]
[maxn]
;int n, m;
intmain()
if(!flag)
int ans =0;
for(
int i =
1; i <= n; i ++
)for
(int j = i; j <= n; j ++)}
cout << ans << endl;
return0;
}
二維字首和
時間限制 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 行第...