問題描述
給定乙個n*m的矩陣a,求a中的乙個非空子矩陣,使這個子矩陣中的元素和最大。
其中,a的子矩陣指在a中行和列均連續的一塊。
輸入格式
輸入的第一行包含兩個整數n, m,分別表示矩陣a的行數和列數。
接下來n行,每行m個整數,表示矩陣a。
輸出格式
輸出一行,包含乙個整數,表示a中最大的子矩陣中的元素和。
樣例輸入
3 3
-1 -4 3
3 4 -1
-5 -2 8
樣例輸出
10 樣例說明
取最後一列,和為10。
資料規模和約定
對於50%的資料,1<=n, m<=50;
對於100%的資料,1<=n, m<=500,a中每個元素的絕對值不超過5000。
步驟一,預處理,每個數存的是從第一行當前行的每行的當前的列的值的和。每次想要的到當前列值和或者幾行的列值和,通過相減就好。這是縱向的壓縮,然後進行橫向的壓縮。第三個迴圈r 從1開始到n,就像一維一樣,進行壓縮。求得當前矩陣k,如果sum>0 sum+=k 如果sum<=0 sum=k; 然後每次比較記錄最大的子陣值,但是還有一種情況是全部都是負數,所以還要加乙個條件,如果全部都是負數,那麼輸出最大的負數。
#include
#include
#include
#include
using
namespace
std;
int zhi[1000][1000];
int dp[1000][1000];
int main()
int sum=0;
int maxi=-5005;
int maxm=-5005;
int flag=0;
for(int i=0;ifor(int j=i+1;j<=n;j++)
if(sum>maxm)}}
}if(!flag)
maxm=maxi;
printf("%d\n",maxm );
}
最大子矩陣 藍橋杯
問題描述 給定乙個n m的矩陣a,求a中的乙個非空子矩陣,使這個子矩陣中的元素和最大。其中,a的子矩陣指在a中行和列均連續的一塊。輸入格式 輸入的第一行包含兩個整數n,m,分別表示矩陣a的行數和列數。接下來n行,每行m個整數,表示矩陣a。輸出格式 輸出一行,包含乙個整數,表示a中最大的子矩陣中的元素...
最大子矩陣
描述 已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 1 子矩陣。比如,如下4 4的矩陣 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩陣是 9 2 4 1 1 8 這個子矩陣的大小是15。輸入輸入是乙個n n的矩陣。輸入的第...
最大子矩陣
已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 1 子矩陣。比如,如下4 4的矩陣 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩陣是 9 2 4 1 1 8 這個子矩陣的大小是15。輸入輸入是乙個n n的矩陣。輸入的第一行給...