题目大意:该题就是给出一个矩阵,求它的最大子矩阵的和。这可以将矩阵进行逐行扫描,将该矩阵转化成一个序列,则题目就变成求其最大子序列的和。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stdlib.h>
using namespace std;
#define INF 99999999
int main(void)
{
int n,i,j,k;
int a[110][110];
int b[110];
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
int m=-INF;
for(i=1;i<=n;i++)//逐行扫描,寻找最大子矩阵的和
{
memset(b,0,sizeof(b));
for(j=i;j<=n;j++)
{
int t=0;
for(k=1;k<=n;k++)
{
b[k]=b[k]+a[j][k];
if(t<=0)
t=b[k];
else
t=t+b[k];
if(t>m)
m=t;
}
}
}
printf("%d\n",m);
}
system("Pause");
return 0;
}