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();   
}

Download