子矩陣的最大累加和

2021-08-06 03:16:35 字數 1025 閱讀 3111

題目:給定乙個矩陣matrix,其中的值有正、有負、有零,返回子矩陣的最大累加和。例如矩陣matrix為:

-90 48 78

64 -40 64

-81 -7 66

其中,最大累加和的子矩陣為:

48 78

-40 64

-7 66

所以返回子矩陣的最大累加和為209。

解析:最簡單也最容易想到的方法是求出矩陣中的所有子矩陣,隨後計算每個子矩陣的累加和,該方法的時間複雜度為o(n^4),因為乙個矩陣中子矩陣的個數是n^4級別。之前介紹過連續子陣列的最大和,求子矩陣的最大累加和問題實際上就是連續子陣列問題的擴充套件,從一維空間轉換為二維空間,我們可以把子矩陣的最大累加問題分解為求連續子陣列的最大累加和,例如乙個m*n的矩陣可以分解為m個一維矩陣,m-1個二維矩陣,m-i個i+1維矩陣等等,二維矩陣行相加又可以轉為一維矩陣,同理,其他維矩陣都可以轉為一維矩陣。隨後在轉換後的一維陣列中求出連續子陣列的最大和,在所有連續子陣列的最大和中選擇乙個最大值即為子矩陣的最大累加和。該演算法的時間複雜度為o(n^2*m)。**如下:

#include #include #include using namespace std;

//連續子陣列的最大和

int subarrmaxsum(vector&arr)

if (sub_max_sum > max_sum)

}return max_sum;

}//子矩陣的最大累加和

int submatixmaxsum(vector> &matrix)

sub_max_sum = subarrmaxsum(arr);

if (sub_max_sum > max_sum)

}} return max_sum;

}int main(void)

, ,

, }; cout << submatixmaxsum(matrix) << endl;

system("pause");

return 0;

}

子矩陣最大累加和

問題描述如下 給定乙個矩陣matrix,其中的值有正 有負 有0,返回子矩陣的最大累加和。藍橋備戰資料 演算法很美 chapter4 多維陣列和矩陣 先想到了一維陣列的求子陣列最大累加和的題目,時間複雜度為o n 利用這種思維來處理這道題目。第一列第二列 第三列最大累加和 第一行 1 1 1 1第一...

子矩陣的最大累加和

一 題目要求 給定乙個矩陣matrix,其中的值有正有負,有0,返回子矩陣的最大累加和,例如,矩陣matrix為 90 48 78 64 40 64 81 07 66 其中,最大累加和的子矩陣為 48 78 40 64 7 66 所以返回累加和209 二 解題思路 將矩陣matrix n n 的每一...

最大連續子矩陣累加和

在此之前我們先做個鋪墊 題目大意 給定n個數,求這些數的某個連續子串行的累加和,保證這個連續子串行的累加和最大 舉個栗子 俗稱樣例 輸入 7 34 9 2 58 3輸出 14樣例解釋 最大的呢是 4 9 2 5 8 由此可見,無法將加上當前數的和與當前最大值進行對比來確定答案,雖然有負數,但之後可能...