链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081
题意:求最大子矩阵和
想办法转换成一维的数列用最大子串和来解决,每次获取第 i 行到第 j 行之间每一列的和保存成一个数列,再最大子串求解
#include<stdio.h>
#include<string.h>
int map[105][105];
int a[105];
int n;
void getsub(int s,int e)
{
int i,j,sum;
for(i=0;i<n;i++)
{
sum=0;
for(j=s;j<=e;j++)
sum+=map[j][i];
a[i]=sum;
}
}
int main()
{
int i,j,k;
while(scanf("%d",&n)!=EOF)
{
int ans=-100000000;
for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&map[i][j]);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
getsub(i,j);
int sum=0;
for(k=0;k<n;k++)
{
sum+=a[k];
if(sum>ans)
ans=sum;
if(sum<0)
sum=0;
}
}
printf("%d\n",ans);
}
return 0;
}