題目描述:給定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...