Tuesday, January 17, 2012

2-D Maximum Sum (2-Dimentional Array)

#include<stdio.h>

#define MAX_N 150

int table[MAX_N + 1][MAX_N + 1];

#define dif(i,j,h) (table[i + h][j] - table[i][j])

int main() {
  int n,i,j,k,t,max;

    scanf("%d",&n);

 for(j=0;j<n;j++)
    table[0][j]=0;


  for(i=1;i<=n;i++)
    for(j=0;j<n;j++)
      scanf("%d",&table[i][j]);

  for(j=0;j<n;j++)
    for(i=1;i<=n;i++)
      table[i][j]=table[i- 1][j]+table[i][j];

  max=table[1][0];

    for(k=1;k<=n;k++)
    for (i=0;i<=n-k;i++)
      for (t=0,j=0;j<n;j++) {
        if (t>=0) t+=dif(i,j,k);
        else t=dif(i,j,k);
        if (t>max) max=t;
      }

   printf("%d\n",max);
  return 0;
}
/*
Input:
4
0 -2 -7  0 9  2 -6  2
-4  1 -4  1 -1
8  0 -2
Outcode:
15
*/

######################################################################



#include<stdio.h>
#define SZ 105


long arr[SZ][SZ];
int main()
{
long n,max,sum,i,j,k;
while(scanf("%ld",&n)==1)
{
for(i=1;i<=n;i++)
{
arr[i][0]=0;
for(j=1;j<=n;j++)
{
scanf("%ld",&arr[i][j]);
arr[i][j]+=arr[i][j-1];
}
}
max=0;
for(k=1;k<=n;k++)
{
for(i=k;i<=n;i++)
{
sum=0;
for(j=1;j<=n;j++)
{
sum+=arr[j][i]-arr[j][k-1];
if(sum<0 && sum<max)
sum=0;
else if(max<sum)
max=sum;
}
}
}
printf("%ld\n",max);
}
return 0;
}
/*
Input:
4
0 -2 -7  0 9  2 -6  2
-4  1 -4  1 -1
8  0 -2
Output:
15
*/

No comments:

Post a Comment