c++之最大子矩阵的和

最大子矩阵的和
***定义:***就是不限定子矩阵的行和列,只要求和最大。
例如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)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值