Tuesday, January 17, 2012

3-D Maximumsum

#include<stdio.h>


#define SZ 20


long arr[SZ][SZ][SZ];


int main()
{
long a ,b ,c ,i ,j ,k ,l , m , sum ,max ,test;


scanf("%ld" , &test);
while(test--)
{
scanf("%ld %ld %ld" , &a ,&b , &c);


for(i = 1;i<=a;i++)
for(j = 1;j<=b;j++)
for(k = 1;k<=c;k++)
scanf("%ld" , &arr[i][j][k]);


for(i = 1;i<=a;i++)
{
for(j = 1;j<=b;j++)
for(k = 2;k<=c;k++)
arr[i][j][k] +=arr[i][j][k-1];
for(k = 1;k<=c;k++)
for(j = 2;j<=b;j++)
arr[i][j][k] +=arr[i][j-1][k];
}


max = 0;


for(i = 1;i<=b;i++)
for(j = 1;j<=c;j++)
for(k = i;k<=b;k++)
for(l = j;l<=c;l++)
{
sum = 0;
for(m = 1;m<=a;m++)
{
sum+=arr[m][k][l] - arr[m][k][j-1] - arr[m][i-1][l] + arr[m][i-1][j-1];
if(sum<0)
sum = 0;
if(sum>max)
max = sum;
}
}


printf("%ld\n" , max);
}
return 0;
}

No comments:

Post a Comment