意思很简单,求矩阵里的最大子矩阵
比如
-90 48 78
64 -40 64
-81 -7 66
最大子矩阵就是第二列 第三列,和为209
我们可以根据数组中求最大和的方法,从左到右遍历,找累加和,如果累加和小于0,则sum归于0,然后重新累加,并且维持一个max
这个矩阵也是,双重循环,进行矩阵遍历,并且建立辅助累加和数组,数组中求最大值就是用上面那个办法
代码如下
#include <iostream>
using namespace std;
#define MAXSIZE 100
int a[][10]={{-90,48,78},{64,-40,64},{-81,-7,66}};
int sum[MAXSIZE];
int m=3;
int n=3;
int result=INT_MIN;
void SumArray(int row)
{
int i;
int total=0;
for(i=0;i<n;i++)
{
sum[i]+=a[row][i];
total+=sum[i];
if(total<0)
total=0;
result=max(result,total);
}
}
void fun()
{
int i=0;
int j=0,k=0;
for(i=0;i<m;i++)
{
memset(sum,0,sizeof(sum));
for(j=i;j<m;j++)
{
SumArray(j);
}
}
}
int main()
{
fun();
cout<<result<<endl;
return 0;
}