題目描述:給定乙個矩陣matrix,其中有正、有負、有0,返回子矩陣的最大累加和。解題思路例如,matrix為:,,
}其中最大累加和的子矩陣為:
2,2所以返回4
這道題的關鍵在於必須是子矩陣,而子矩陣的情況太多了,如果一一枚舉的話想必是不能達到要求的。所以這道題需要對原二維陣列(矩陣)進行一些預處理,也就是降維度或壓縮,方法就是對矩陣按列求和,然後按照一位陣列的思想去求這個最大累加和。我之前有寫過一篇一位陣列解決類似問題的文章,可以去看一下。一位陣列求子陣列的最大累加和
有了這樣的處理真的就很方便地可以解決啦
//子矩陣的最大累加和,注意:也要是連續的子矩陣
#include
#include
#define n 3
using
namespace std;
intfindmax
(int arr)
;int
solve
(int matrix[
][n]
,int m)
;//輔助陣列用於壓縮
int beginrow,j,k;
int tmpmax,max=helper[0]
;while
(beginrow < m)
//求完了就去找壓縮後數列的最大值
tmpmax =
findmax
(helper);if
(tmpmax > max)
}memset
(helper,
0,n*
sizeof
(int))
;//helper清零
beginrow++;}
return max;
}int
findmax
(int arr)
if(tmpsum > maxsum)
}return maxsum;
}int
main()
,,};
int res =
solve
(matrix,3)
; cout<<
"result: "
<
}
執行結果示例
時間複雜度分析
子矩陣最大累加和
問題描述如下 給定乙個矩陣matrix,其中的值有正 有負 有0,返回子矩陣的最大累加和。藍橋備戰資料 演算法很美 chapter4 多維陣列和矩陣 先想到了一維陣列的求子陣列最大累加和的題目,時間複雜度為o n 利用這種思維來處理這道題目。第一列第二列 第三列最大累加和 第一行 1 1 1 1第一...
子矩陣的最大累加和
題目 給定乙個矩陣matrix,其中的值有正 有負 有零,返回子矩陣的最大累加和。例如矩陣matrix為 90 48 78 64 40 64 81 7 66 其中,最大累加和的子矩陣為 48 78 40 64 7 66 所以返回子矩陣的最大累加和為209。解析 最簡單也最容易想到的方法是求出矩陣中的...
子矩陣的最大累加和
一 題目要求 給定乙個矩陣matrix,其中的值有正有負,有0,返回子矩陣的最大累加和,例如,矩陣matrix為 90 48 78 64 40 64 81 07 66 其中,最大累加和的子矩陣為 48 78 40 64 7 66 所以返回累加和209 二 解題思路 將矩陣matrix n n 的每一...