编程之美--最大子矩阵 hdu1081
#include<stdlib.h>
#include<iostream>
#include<stdio.h>
#include<vector>
#include<time.h>
#include<set>
#include<map>
#include<assert.h>
#include<string>
#include<stack>
using namespace std;
int maxarray(int *data,int n)
{
int b;
int ans=0;
b=data[0];
ans=b;
for(int i=1;i<n;i++)
{
b=max(b,0)+data[i];
if(ans<b) ans=b;
}
return ans;
}
int main()
{
int n;
int data[105][105];
int b[105];
int ans,tmp;
while(scanf("%d",&n)==1)
{
memset(data,0,sizeof(data));
memset(b,0,sizeof(b));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&tmp);
data[i][j]=data[i-1][j]+tmp;
}
ans=-10000000;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<=n;j++)
{
for(int k=1;k<=n;k++)
b[k]=data[j][k]-data[i][k];
tmp=maxarray(b,n);
if(tmp>ans) ans=tmp;
}
}
printf("%d\n",ans);
}
return 0;
}