最大子矩陣(動態規劃)

2021-08-09 15:33:36 字數 1039 閱讀 6743

最大矩陣和顧名思義,就是乙個矩陣和最大,例如下面的矩陣

0 -2 -7  0

9 2 -6 2

-41 -41-1

80 -2

最終找到了和為15的矩陣

9 2-41

-18

所選的矩陣沒有規定,只要在這個大矩陣中,就可以了,那麼我們需要限定它的行和列;

我們用三個for迴圈把所有的行的情況列舉,分別是i,j,k

i從0開始,代表開始的行,

j從i 開始,代表從i行開始變化,

k從0開始,代表列的變化。

這樣的話我們還需要找出變化的列,然後計算它的和

我們已經知道了最優解一定在i,j之間(遍歷肯定能找到),如果我們事先求得了每一列的和,然後在這個一位陣列中找和最大的子段,對應的列就是我們需要的列。

什麼意思呢,例如

9  2 -6  2

-41 -41-1

80 -2

i=1,j=3的時候,已經確定了最優解的行數,然後把每一列求和,得到一維陣列

4 11 -10 1
求出最大子段和,4 + 11 = 15,這樣的話就不需要去列舉列的變化了。

我們需要維護乙個一維陣列來儲存,寫乙個求最大子段和的函式就ok了

int maxarray(int

*a, int n)

return maxx;

}int maxdoulearray(int (*a)[maxn], int n)

max1 = maxarray(each, n);//每求好一列就計算

if(max1 > max2) max2 = max1;}}

return max2;

}

最大子矩陣(動態規劃)解析

已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 1 子矩陣。比如,如下4 4的矩陣 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩陣是 9 2 4 1 1 8 這個子矩陣的大小是15。輸入是乙個n n的矩陣。輸入的第一行給出n...

動態規劃 最大子矩陣的和

問題 最大子矩陣的和 最大子矩陣的和這個問題實際上是子串的最大和向二維空間的擴充套件!我們如果把每一列都看作乙個數的話,實際上也是個子串的最大和問題!不多說啦,大家看 體會吧!package com.liheng.algorithm author administrator 利用動態規劃求最大子矩陣...

openjudge 最大子矩陣 (DP 動態規劃)

include include cstring include include iomanip include vector include cmath include stack include algorithm include include map include queue using n...