最大子矩陣求和問題

2021-09-30 10:28:41 字數 1024 閱讀 8000

給定乙個n*n的矩陣,計算最大子矩陣和。

思路:最大子段和問題可以用動態規劃在o(n)內解決,該題可以借助最大子段和的解法來做。我們考慮第i行到第j行的子矩陣,可以將i ~ j行的矩陣合併為乙個一維陣列,即把每列對應的數相加,那麼這個一維陣列的最大子段和就是原子矩陣的最大和。

我們用乙個二維陣列p來儲存矩陣的部分和,p[i][j]表示左上角是(1, 1),(下標從1開始), 右下角是(i, j)的矩陣中元素的和。如果我們要求i~j行、k~m列的矩陣中元素的和,我們可以通過以下式子計算得出:

sum = p[j][m] - p[j][k-1] - p[i-1][m] + p[i-1][k-1]

只需要o(1)的時間。

部分和p[i][j]要怎麼計算呢?我們可以通過更小的部分和來計算得到它:

p[i][j] = p[i-1][j] + p[i][j-1] - p[i-1][j-1] + a[i][j]

其中a[i][j]是矩陣中的整數。我們只需要o(n2 ) 的時間即可預處理得到所有的部分和。

所以總的時間為o(n3)。

[cpp]view plain

copy

#include 

#include 

using

namespace std;  

const

int n = 101;  

int a[n][n], p[n][n];  

int maxrecsum(int n)  

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

int max = int_min;  

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

}  }  return max;  

}  int main()  

}  cout << maxrecsum(n) << endl;  

return 0;  

最大子矩陣求和問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!給定乙個n n的矩陣,計算最大子矩陣和。思路 最大子段和問題可以用動態規劃在o n 內解決,該題可以借助最大子段和的解法來做。我們考慮第i行到第j行的子矩陣,可以將i j行的矩陣合併為乙個一維陣列,即把每列對應的數相加,那麼這個一維陣列的最大子段和...

最大子串行求和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。輸入第1行給出正整數k 第2行給出k個整數,其間以空格分隔。在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。6 2 11 4 1...

最大子串行求和問題

給定整數a1 role presentation a1a 1,a2 role presentation a2a 2,an role presentation ana n 可能有負數 求 k ija k role presentation jk iak k i jak的最大值 為方便起見,如果所有整數...