最大子矩陣和

2021-09-13 16:55:11 字數 537 閱讀 2776

一、題目

乙個m*n的矩陣,找到此矩陣的乙個子矩陣,並且這個子矩陣的元素的和是最大的,輸出這個最大的值。

二、解題思路

這題是最大子段和的二維推廣,實質可以將二維進行列舉,並化為最大子段和求解。最後子矩陣一定是在某兩行之間的。因此假設

我們認為子矩陣在第i行和第j行之間,我們如何得到i和j呢,可以進行列舉。  列舉所有1<=i<=j<=m,表示最終子矩陣選取的行範圍。

然後對每一種i,j行間選定後對列用最大子段和處理(可以想象成將矩陣的 i 行到 j 行進行壓縮成一行後對這一行進行最大欄位和求解)。

三、**

#include using namespace std;

int main ()

int b[n+1]; // 記錄每一輪的最大子段和

int max = a[1][1]; // 記錄最大子矩陣和

for(int i=1; i<=m; i++)

} }

cout

}

最大子段和 最大子矩陣和

給出n個整數序列 可能為負數 組成的序列a1,a2,an,求該序列形如 的子段和的最大值。當所有整數均為負數時,定義最大子段和為0。多測試用例。每個測試用例佔2行 第一行是序列的個數n 0 n 10000 第二行是n個整數。為每個測試用例輸出一行結果 最大子段和。6 2 11 4 13 5 2 31...

最大子矩陣和

前言 今天花了很長時間,看了無數人寫的帖子,但是幾乎沒有人把這個問題一下子說得很清楚,所以,我把這個問題按照自己的思路寫出來,希望能夠把這個問題講清楚。問題 求乙個m n的矩陣的最大子矩陣和。比如在如下這個矩陣中 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 擁有最大和的子矩陣為 ...

最大子矩陣和

前言 今天花了很長時間,看了無數人寫的帖子,但是幾乎沒有人把這個問題一下子說得很清楚,所以,我把這個問題按照自己的思路寫出來,希望能夠把這個問題講清楚。問題 求乙個m n的矩陣的最大子矩陣和。比如在如下這個矩陣中 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 擁有最大和的子矩陣為 ...