给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和
例如,matrix为
解决思路,三重循环,第一重循环标记的是起始行,第二重循环标记的是结束行,第三重循环是更新sum中每一个元素的值
-1 -1 -1
-1 2 2
-1 -1 -1
其中最大累加和的子矩阵为:
2 2
所以返回4
#include<iostream>
using namespace std;
int arr[][1]={
{ 1, 1, 1, 1, 1},
{-1, 2, 2, 7, 3},
{ 1, 1, 1, 1, 1},
{-1, 2, 2, 7, 3},
{-1,-1,-1, 3, 3}
};
int MAX;
int N=5;
int main()
{
for(int i=0;i<N;i++)
{
int sum[5]={0};
for(int j=i;j<N;j++)
{
for(int k=0;k<N;k++)
{
sum[k]+=arr[j][k];
}
int _max=0;
for(int k=0;k<N;k++)
{
if(_max>0)
_max+=sum[k];
else
_max=sum[k];
if(_max>MAX)
MAX=_max;
}
}
}
cout<<MAX;
}