藍橋杯 歷屆試題 最大子陣(C )

2021-10-07 19:17:17 字數 1821 閱讀 5979

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

給定乙個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。

求最大子陣的元素和,可以將幾行資料合為一行,每次比較每一行的各列資料之和與當前列值的大小,如果每一行的各列資料之和大於當前列的值,則將其賦給tmp,比較tmp與maxsum的大小,將maxsum更新為較大的值,並將tmp作為相加後的操作,繼續將後面的列加上來,並進行比較;如果當前列數值較大,則將其值賦給tmp,比較tmp與maxsum的大小,將maxsum更新為較大的值,繼續之後的操作。

對於題中的例子,sum用來儲存每列的和,當輸入第一行資料為-1,-4,3時,sum儲存的為:

sum12

3-1-43

然後將第一行的每列資料進行相加並與當前列進行比較。此時, 初始化maxsum=-inf,tmp=0;

第一步:

⑴加上第一列資料-1時,更新為maxsum=-1,tmp=-1;

⑵加上第二列資料-4,由於tmp+sum[2]= -1 + -4 =-5 < sum[2] =-4,因此tmp=sum[2]=-4,maxsum=-1;

⑶加上第三列資料3,更新為tmp=-1,maxsum=3;

第二步:將sum加上第二行資料3,4,-1,sum更新為:

sum12

3202

按照第一行資料依次類推,列舉全部的合併列並進行比較求出最大子陣的元素和,即maxsum的值最大。

參考:【藍橋杯】歷屆試題 最大子陣

歷屆試題 最大子陣

#include

#include

#include

#include

using

namespace std;

#define inf 0x3f3f3f3f

int a[

505]

[505

],sum[

505]

;//a儲存原始資料,sum儲存每一行的列數和

藍橋杯 歷屆試題 最大子陣

歷屆試題 最大子陣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個n m的矩陣a,求a中的乙個非空子矩陣,使這個子矩陣中的元素和最大。其中,a的子矩陣指在a中行和列均連續的一塊。輸入格式 輸入的第一行包含兩個整數n,m,分別表示矩陣a的行數和列數。接下來n行,每行m個整數,表示矩...

藍橋杯 歷屆試題 最大子陣

歷屆試題 最大子陣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個n m的矩陣a,求a中的乙個非空子矩陣,使這個子矩陣中的元素和最大。其中,a的子矩陣指在a中行和列均連續的一塊。輸入格式 輸入的第一行包含兩個整數n,m,分別表示矩陣a的行數和列數。接下來n行,每行m個整數,表示矩...

藍橋杯 歷屆試題 最大子陣

歷屆試題 最大子陣 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個n m的矩陣a,求a中的乙個非空子矩陣,使這個子矩陣中的元素和最大。其中,a的子矩陣指在a中行和列均連續的一塊。輸入格式 輸入的第一行包含兩個整數n,m,分別表示矩陣a的行數和列數。接下來n行,每行m個整數,表示矩...