求二维数组中各个矩阵和的最大值一种方法是穷举法;
采用for循环列举出所有子矩阵的和,求出最大值:
#include<iostream>
using namespace std;
int max()
{
int n=3,m=3; //n、m可随意取值,但数组越大,程序反应越慢
int a[3][3]={1,2,2,4,5,-1,3,41,-6};
int b=0;
int h=0;
int f=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{ int x=a[i][j]; int y=i+1; int k=j+1;
if(x>b) { b=x; }
while(k<m||y<n)
{
if(y<n)
y++;
if(k<m)
k++;
for(int u=i;u<y;u++)
{ for(int v=j;v<k;v++)
{ h=h+a[u][v]; }
if(h>b)
b=h;
}
for(int o=j;o<k;o++)
{ for(int p=i;p<y;p++)
{ f=f+a[p][o]; }
if(f>b)
b=f;
}
h=0;
f=0;
} //while
}
}
return b;
}
int main()
{
int b=max();
cout<<b<<endl;
return 0;
}