最大子矩陣和問題。給定m行n列的整數矩陣a,求矩陣a的乙個子矩陣,使其元素之和最大。輸入格式:
第一行輸入矩陣行數m和列數n(1≤m≤100,1≤n≤100),再依次輸入m×n個整數。
輸出格式:
輸出第一行為最大子矩陣各元素之和,第二行為子矩陣在整個矩陣中行序號範圍與列序號範圍。
輸入樣例
5 6
60 3 -65 -92 32 -70
-41 14 -38 54 2 29
69 88 54 -77 -46 -49
97 -32 44 29 60 64
49 -48 -96 59 -52 25
輸出樣例
321
2 4 1 6
雖然最大子矩陣可以通過暴力求解直接解出來,不過時間複雜度太大 一般採用矩陣壓縮的方法去求最大子矩陣
將矩陣壓縮完之後,利用最大子串行求解。
#includeusing namespace std;
int matrix[100][100];
/** * 從第一行開始,逐漸將1行、2行、3行當做一行得出最大值
* * 找出最大子字段和即可
*/int main()
else
}for(int p=0;pmax)
}delete dp;
delete start;}}
printf("%d\n",max);
printf("%d %d %d %d",startrow+1,endrow+1,startcol+1,endcol+1);
cin.get();
return 0;
}
最大子矩陣問題
thinking開始令pos1 1,pos2 1 先判斷pos1 pos2高度的每個格仔,取或者不取,得出一維也就是只有第一行的最大子矩陣。然後pos2 因為是要求連續子矩陣,那麼從第一行到第二行的子矩陣相加,就相當與只判斷一行,可以找出pos1 1到pos2 2也就是第一行到第二行且只取這兩行作為...
模板 動態規劃之最大子段和 最大子矩陣問題
給出一段序列,選出其中連續且非空的一段使得這段和最大。input 第一行是乙個正整數n n 200000 表示了序列的長度。第接下來的n行包含n個絕對值不大於10000的整數a i 描述了這段序列。output 僅包括1個整數,為最大的子段和是多少。子段的最小長度為1。sample input 2 ...
動態規劃之最大子矩陣和
分析 我們已經解決了一維的問題 基礎篇中的最大子段和問題 現在變成二維了,我們看看能不能把這個問題轉化為一維的問題。最後子矩陣一定是在某兩行之間的。假設我們認為子矩陣在第i行和第j列之間,我們如何得到i和j呢,對,列舉。列舉所有1 i j m,表示最終子矩陣選取的行範圍。我們把每一列第i行到第j行之...