MAXCUB - Khối lập phương lớn nhất
Tác giả: hieult
Ngôn ngữ: C++
#include <cstdio>
//#include <conio.h>
#define Max 33
int Maxcub,Sum[Max][Max][Max],N;
void nhap()
{
int Cube ;
Maxcub = -2147483647;
scanf("%d",&N);
for(int i = 1;i<=N;i++)
{
for(int j = 1;j<=N;j++)
for(int k = 1;k<=N;k++)
{
scanf("%d",&Sum[i][j][k]);
Sum[i][j][k] = Sum[i][j][k] + Sum[i][j-1][k] + Sum[i][j][k-1] - Sum[i][j-1][k-1];
}
for(int j = 1;j<=N;j++)
for(int k = 1;k<=N;k++)
Sum[i][j][k] = Sum[i][j][k] + Sum[i-1][j][k];
}
}
int Vl(int i,int j,int k,int l)
{
int S1,S2,S3;
S1 = Sum[i+l][j+l][k-1] + Sum[i+l][j-1][k+l] - Sum[i+l][j-1][k-1];
S2 = Sum[i-1][j+l][k+l] + Sum[i-1][j-1][k-1];
S3 = Sum[i-1][j+l][k-1] + Sum[i-1][j-1][k+l];
return Sum[i+l][j+l][k+l] - (S1 + S2 - S3);
}
void Solve()
{
int i,j,k,l,Cost;
for(int i = 1;i<=N;i++)
for(int j = 1;j<=N;j++)
for(int k = 1;k<=N;k++)
for(int l = 1;l<=N;l++)
if (i + l <= N && j + l <= N && k + l <= N)
{
Cost = Vl(i, j, k, l);
if (Cost > Maxcub) Maxcub = Cost;
}
}
int main()
{
//freopen("MAXCUB.in","r",stdin);
int test;
scanf("%d",&test);
for(int i = 1;i<=test;i++)
{
nhap();
Solve();
printf("%d\n",Maxcub);
}
//getch();
}