最大子陣和

2022-07-31 15:21:14 字數 704 閱讀 8085

解題思路: 首先,考慮一維的情況。a1,a2,a3,....an的最大子串行和。我們維護乙個(最大字首和),當這個字首和小於0的時候,就替換為當前值,那麼最大值一定在這些字首和中。

然後對於二維的情況,我們列舉可能的起始列標,這樣就是一維的最大子串行和的問題了。例如,當我們選定第一列和第三列後,把每一行第一列到第三列的數加在一起,那麼就是乙個一維的問題了。對於給定區間的和,我們可以通過字首和o(1)計算,sum[i,j]=sum[0,j]-sum[0,i-1]。

1 #include 2

using

namespace

std;

34 typedef long

long

ll;5

const

int maxn=100005;6

const ll mon7 = 1e9+7;7

int a[105][105];8

int sum[105][105];9

intn,m;

1011

void

solve()

1225}26

}27 printf("

%d\n

",ans);28}

2930

intmain()

3148}49

solve();50}

51return0;

52 }

DP 最大子陣和

最大子陣和 description 有乙個包含正數和負數的二維陣列。乙個子矩陣是指在該二維陣列裡,任意相鄰的下標是1 1或更大的子陣列。乙個子矩陣的和是指該子矩陣中所有元素的和。本題中,把具有最大和的子矩陣稱為最大子矩陣。例如 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2這個陣列的...

最大子段(陣)和

這是一道dp經典題 感覺什麼都經典 也是很常見的乙個題型,具體思路就是用sum記錄乙個字首和,從a 1 遍歷到a n 每次,加上去,但是一旦sum成了負數,就沒必要字首和了,重新賦值0 因為前面就是累贅了 然後,就做出來了.1 include2 using namespace std 3int n,...

最大子陣 C

problem description 給定乙個 n m 的矩陣a,求 a 中的乙個非空子矩陣,使這個子矩陣中的元素和最大。其中,a 的子矩陣指在 a 中行和列均連續的一部分。輸入的第一行包含兩個整數 n,m 1 n,m 50 分別表示矩陣 a 的行數和列數。接下來 n 行,每行 m 個整數,表示矩...