NYOJ104 最大和(dp 求最大子矩陣)

2021-08-03 17:45:16 字數 971 閱讀 6538

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:5 描述

給定乙個由整數組成二維矩陣(r*c),現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。

例子:0 -2 -7 0 

9 2 -6 2 

-4 1 -4 1 

-1 8 0 -2 

其最大子矩陣為:

9 2 

-4 1 

-1 8 

其元素總和為15。 

輸入

第一行輸入乙個整數n(0

輸出輸出矩陣的最大子矩陣的元素之和。

樣例輸入

1

4 40 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

樣例輸出

15

首先求出每一行的字首和,這樣可以用o(1)的複雜度求出區間和[l,r]這個區間,就可以用e[r]-e[l-1]表示

然後從上往下,遍歷每一種可能,重新整理最大值即可

注意特殊情況,即全負的情況,由於沒給資料範圍,讓最大值初始化=e[1][1]即可

另外還要考慮子矩陣和為負的情況,要先重新整理最大值,再將中間值歸0,繼續計算子矩陣,因為有可能為全負;

#include #include#include#include#define mem(a,b) memset(a,b,sizeof(a))

using namespace std;

int e[105][105];

int main()

}int maxx=e[1][1];

for(int i=1;i<=m;i++)}}

printf("%d\n",maxx);

}}

nyoj 104 最大和 區間dp

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...

最大子矩陣 NYOJ104

給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。這個問題就是最大值子區間和的二維問題。一維問題的解決思路是,max sum表示從第一數到目前的最大和,sum是某段區間的和,如果sum 0,那麼sum沒有利用價值了,把s...

NYOJ 104 最大和(最大子串 乙個小技巧)

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...