藍橋杯 子矩陣的最大累加和

2021-10-02 23:18:42 字數 1176 閱讀 1936

題目描述:給定乙個矩陣matrix,其中有正、有負、有0,返回子矩陣的最大累加和。

例如,matrix為:,,

}其中最大累加和的子矩陣為:

2,2所以返回4

解題思路

這道題的關鍵在於必須是子矩陣,而子矩陣的情況太多了,如果一一枚舉的話想必是不能達到要求的。所以這道題需要對原二維陣列(矩陣)進行一些預處理,也就是降維度或壓縮,方法就是對矩陣按列求和,然後按照一位陣列的思想去求這個最大累加和。我之前有寫過一篇一位陣列解決類似問題的文章,可以去看一下。一位陣列求子陣列的最大累加和

有了這樣的處理真的就很方便地可以解決啦

//子矩陣的最大累加和,注意:也要是連續的子矩陣

#include

#include

#define n 3

using

namespace std;

intfindmax

(int arr)

;int

solve

(int matrix[

][n]

,int m)

;//輔助陣列用於壓縮

int beginrow,j,k;

int tmpmax,max=helper[0]

;while

(beginrow < m)

//求完了就去找壓縮後數列的最大值

tmpmax =

findmax

(helper);if

(tmpmax > max)

}memset

(helper,

0,n*

sizeof

(int))

;//helper清零

beginrow++;}

return max;

}int

findmax

(int arr)

if(tmpsum > maxsum)

}return maxsum;

}int

main()

,,};

int res =

solve

(matrix,3)

; cout<<

"result: "

<

}

執行結果示例

時間複雜度分析

子矩陣最大累加和

問題描述如下 給定乙個矩陣matrix,其中的值有正 有負 有0,返回子矩陣的最大累加和。藍橋備戰資料 演算法很美 chapter4 多維陣列和矩陣 先想到了一維陣列的求子陣列最大累加和的題目,時間複雜度為o n 利用這種思維來處理這道題目。第一列第二列 第三列最大累加和 第一行 1 1 1 1第一...

子矩陣的最大累加和

題目 給定乙個矩陣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 的每一...