编程之美--最大子矩阵 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;
}

posted @ 2012-08-23 16:50  wuzhibin  阅读(415)  评论(0编辑  收藏  举报