藍橋 最大子矩陣

2021-07-26 20:17:30 字數 1078 閱讀 2273

問題描述

給定乙個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的矩陣。輸入的第一行給...