//这道题的题意说的比较模糊,题目里没有说要多个测试数据,弄得我只处理了一次,导致老是错误,又找不到问题所在!
/*
#include<iostream>
#include<cstdio>
using namespace std;
const int MAX=10010;
int arr[MAX];
int main()
{
int s,max=-200;
int we=0;
int m,n;
while(scanf("%d",&arr[0])!=EOF)
{
//cin》arr[0];//输入方阵的维数
m=n=arr[0];
for(int i=1;i<=arr[0]*arr[0];i++)
cin》arr[i];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)//这里是表示块数的大小,i*j
for(int p=1;m-p>=i-1 ;p++)
for(int q=1;n-q>=j-1 ;q++)//搜索路线,自上而下,自左向右
{
int cur=p+m*(q-1);
int count=0;
int temp=cur;
int temp1=1;
s=0;
//cout《"第"《we《"次搜索: "《endl;
//cout《"起点是 行数"《p《","《"列数"《q《endl;
//cout《"p="《p《",n="《n《endl;
for(int k=1;k<=i*j;k++)
{
//cout《arr[temp]《" ";
s=s+arr[temp];
count++;
temp++;
if(count>=i)
{
temp=cur+temp1*m;
temp1++;
count=0;
}
}
//cout《endl;
//we++;
if(s>max)
max=s;
}
cout《max《endl;
//system("pause");
}
return 0;
}
*/
#include<iostream>
#include<cstdio>
using namespace std;
int arr[101][101];
int sum[101],dp[101];
int main()
{
int i,j,k,p,n;
while(scanf("%d",&n)!=EOF)
{
int max=-200;
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin》arr[i][j];
//很难想到,这居然是一道动态规划题
//1、最大子字段和
/*