問題描述如下
給定乙個矩陣matrix,其中的值有正、有負、有0,返回子矩陣的最大累加和。
藍橋備戰資料《演算法很美》chapter4——多維陣列和矩陣先想到了一維陣列的求子陣列最大累加和的題目,時間複雜度為o(n),利用這種思維來處理這道題目。
第一列第二列
第三列最大累加和
第一行-1
-1-1
-1第一行+第二行-211
2第一行+第二行+第三行-300
0第二行-122
4
第二行+第三行-211
2第三行-1
-1-1
-1這樣一來就可以知道子矩陣的最大累加和為4。
需要用到雙重迴圈遍歷行的組合,將多行元素合成一行元素,
這樣就可以利用一維陣列求子陣列最大累加和的方法求解,因此時間複雜度為o(n3)。
#include
#include
using namespace std;
int*
*arr;
// 一維陣列最大子陣列累加和
intmaxsum
(int
*arr,
int n)
if(temps <0)
}return s;
}// 子矩陣最大累加和
intmaxsum
(int
**arr,
int n)
// i和j一起確定子矩陣的寬度
for(
int j = i; j < n; j++
)// 呼叫一維陣列的求最大累加和方法
temps =
maxsum
(tempsum, n);if
(temps > s)
} delete [
]tempsum;
}return s;
}int
main()
// 輸入資料
for(
int i =
0; i < n; i++)}
// 查詢子矩陣最大累加和
cout <<
maxsum
(arr, n)
<< endl;
// 釋放陣列資源
for(
int i =
0; i < n; i++)
delete [
]arr;
}return0;
}
【end】感謝閱讀 子矩陣的最大累加和
題目 給定乙個矩陣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 的每一...
最大連續子矩陣累加和
在此之前我們先做個鋪墊 題目大意 給定n個數,求這些數的某個連續子串行的累加和,保證這個連續子串行的累加和最大 舉個栗子 俗稱樣例 輸入 7 34 9 2 58 3輸出 14樣例解釋 最大的呢是 4 9 2 5 8 由此可見,無法將加上當前數的和與當前最大值進行對比來確定答案,雖然有負數,但之後可能...