原题:http://acm.hdu.edu.cn/showproblem.php?pid=1081
题目大意:给定一整型二维矩阵,求出总和最大的子矩阵
思路:从一维扩展到二维
求一维最大连续子序列:
int max(int a[MAX],int n)
{
int i, j, sum = 0, max = -10000;
for(i = 1; i <= n; i++)
{
sum += a[i];
if(sum < 0)
sum = 0;
if(sum > max)
max = sum;
}
return max;
}
题解代码:
#include<stdio.h>
#include<string.h>
#define MAX 105
int main()
{
int a[MAX][MAX];
int n,i,j,k;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
a[i][j]+=a[i][j-1];//a[i][j]保存前j列的总和
}
int max=-10000;
for(i=0;i<n;i++)
for(j=i+1;j<=n;j++)
{
int sum=0;
for(k=1;k<=n;k++)//i,j扫描列,k扫描行
{
sum+=a[k][j]-a[k][i];
if(sum<0)
sum=0;
if(sum>max)
max=sum;
}
}
printf("%d\n",max);
}
return 0;
}