#include<iostream>
#include<list>
#include<string>
#include<cstring>
#include<sstream>
#include<cctype>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stack>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<map>
#include<utility>
#include<iomanip>
#include<queue>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define PB push_back
#define pi acos(-1.0)
#define eps 1e-9
long sum[120][120];
int main()
{
int n,a,b,c,d,arr[120][120];
long max,temp;
while(cin>>n)
{
max=0;
for(a=1;a<=n;a++)
for(b=1;b<=n;b++)
cin>>arr[a][b];
for(a=1;a<=n;a++)
for(b=1;b<=n;b++)
for(c=1;c<=a;c++)
for(d=1;d<=b;d++)
sum[a][b]+=arr[c][d];
for(a=0;a<=n;a++)
for(b=0;b<=n;b++)
for(c=0;c<=a;c++)
for(d=0;d<=b;d++)
{
temp=sum[a][b]-sum[a][d]-sum[c][b]+sum[c][d];
if(temp>max)
max=temp;
}
cout<<max<<endl;
clr(sum);
}
return 0;
}
#include
ReplyDelete#define max(a,b) a>b ? a:b
using namespace std;
int row[110][110],mat[110][110],n,m;
int func(int start, int end)
{
int i,j,curnt=0, mx=-1270000;
for(i=1;i<=n;i++)
{
j=row[i][end]-row[i][start-1];
curnt+=j;
if(curnt>mx) mx=curnt;
if(curnt<0) curnt=0;
}
return mx;
}
int main()
{
int i,j,temp;
while(cin>>n)
{
for(i=0;i<=n;i++)
{
row[i][0]=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>mat[i][j];
row[i][j]=row[i][j-1]+mat[i][j];
}
}
temp=-12700000;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
temp=max(temp,func(i,j));
}
}
cout<<temp<<endl;
}
return 0;
}
could you please explain the logic..i cannot understand the code :(
ReplyDelete