最大子矩阵的和
***定义:***就是不限定子矩阵的行和列,只要求和最大。
例如a[3][3]=
1 2 3
0 7 -1
1 -2 0
的max=a[0][0]+a[0][1]+a[0][2]+a[1][0]+a[1][1]+a[1][2]=12;
***基本思路:***假设最大子矩阵的行数为i,(i从1到n),分别求出1-i,2-(i+1),3-(i+2),…(n-i+1)-(n)行所对应列的和,对所得结果的每一个数组求最大子段和,这些和中的最大值就是最大子矩阵之和。
举例:
a[3][3]=
1 2 3
0 7 -1
1 -2 0
假设最大子矩阵为1行,i=1,则不需要计算对应列的和,直接就a[0][],a[1][],a[2][]的最大字段和,分别为6,7,1,此时max=7;i=2,即最大子矩阵为2行,分别求出1-i,2-(i+1),3-(i+2),…(n-i+1)-(n)行所对应列的和,第1行+第2行=(1,9,2),第2行+第3行=(1,5,-1),在求所得一维矩阵的最大子段和分别为12和6,此时更新max=12;i=3,即最大子矩阵为3行,此时第1行+第2行+第3行=(2,7,2)
c++之最大子矩阵的和
最新推荐文章于 2024-05-27 15:45:21 发布