108

#include <stdio.h>

int a[100][100]={0};
int N;
int Line[100];

int KadaneAlg();
int MatSum(int a,int b);

int main()
{
	int p=-100;
	int Max=-100;
	while(scanf("%d",&N)==1)
	{
		Max=-100;
		p =-100;
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<N;j++)
				scanf("%d",&a[i][j]);
		}

		for(int k=0;k<N;k++)
		{
			for(int l=k;l<N;l++)
			{
				p = MatSum(k,l);
				if(p>Max)
					Max = p;
			}
		}

		printf("%d\n",Max);
	}

	return 0;
}


int MatSum(int c,int b)
{
	int p;
	for(int i=0;i<N;i++)
	{
		p =0;
		for(int j=c;j<=b;j++)//row
		{
			p += a[j][i];
		}
		Line[i] = p;
	}

	return KadaneAlg();

}

int KadaneAlg()
{
   int max_so_far = 0, max_ending_here = 0;
   int i;
   for(i = 0; i < N; i++)
   {
     max_ending_here = max_ending_here + Line[i];
     if(max_ending_here < 0)
         max_ending_here = 0;
     else if (max_so_far < max_ending_here)
         max_so_far = max_ending_here;
   }
   return max_so_far;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *