多行最大子矩陣和問題

2021-10-10 11:39:32 字數 1048 閱讀 2538

題目描述:

給定n×n矩陣,矩陣元素都是-127到+127之間的整數。請找到乙個子矩陣,使得其元素之和最大。例如給定4*4矩陣 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 最大子矩陣為 9 2 -4 1 -1 8 最大子矩陣和為9+2+(-4)+1+(-1)+8 = 15.

輸入資料:

多組測試資料,每組測試資料的第一行整數 n (n<=100)。接下來n行元素,每行n個元素,每個元素介於-127到127之間。

輸出資料:

最大子矩陣元素之和,每組測試資料對應一行。

樣例輸入:

4

0 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

樣例輸出:

解析:採用字首和的方式進行求解。

步驟一:對原矩陣的每列,求字首和。

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

b[i][j]=b[i-1][j]+a[i][j];

步驟二:先確定子矩陣的起始行 i, 然後確定終止行 j , 最後遍歷終止列  k,儲存過程中的最大sum值。

int max=b[1][1];

for(int i=1;i<=n;i++)

for(int j=i;j<=n;j++)

}

注:與連續最大序列和 同理。

完整**

#include#include#include#define n 1005

using namespace std;

int a[n][n],b[n][n];

int main()

}cout

}

最大子矩陣和問題

給定乙個長度為n的一維的陣列matrix n 讓求其最大matrix i matrix i 1 matrix j sum問題?簡單演算法 窮舉法先預處理map n 表示從matrix 0 matrix n 的和 for int i 0 to n for int j i 1 to n int tmp ...

最大子矩陣問題

thinking開始令pos1 1,pos2 1 先判斷pos1 pos2高度的每個格仔,取或者不取,得出一維也就是只有第一行的最大子矩陣。然後pos2 因為是要求連續子矩陣,那麼從第一行到第二行的子矩陣相加,就相當與只判斷一行,可以找出pos1 1到pos2 2也就是第一行到第二行且只取這兩行作為...

最大子段和 最大子矩陣和

給出n個整數序列 可能為負數 組成的序列a1,a2,an,求該序列形如 的子段和的最大值。當所有整數均為負數時,定義最大子段和為0。多測試用例。每個測試用例佔2行 第一行是序列的個數n 0 n 10000 第二行是n個整數。為每個測試用例輸出一行結果 最大子段和。6 2 11 4 13 5 2 31...