題目大意:對于n*n的矩陣,求它的最大子矩陣和。
其實就是最大子串和的擴充版本,當然首先嘗試用最大子串和的變體解決這道題。
首先考慮到求矩陣的每一個子矩陣和都可以首先對行或列累加,就把二維矩陣求和轉化成一維數組求和。把這一點想辦法轉化到求最大子串和。
可以初始化時對輸入矩陣進行處理,ai表示第i行前j個數字之和。
在計算所有子矩陣的和時,用i,j控制子矩陣的左右區間,用k周遊子矩陣每一行(也就是把子矩陣同行數字相加,成一列一維數組,對這個數組用求最大子串和的方法即可求出最大值)。而調整初始矩陣是為了避免重複累加資料,節省時間。
代碼: