MAXCUB - Khối lập phương lớn nhất

Tác giả: flashmt

Ngôn ngữ: Pascal

const maxn=31;
var test,it,n,re:longint;
    a:array[1..maxn,1..maxn,1..maxn] of longint;
    f,x,y:array[0..maxn,0..maxn,0..maxn] of longint;

procedure rf;
var i,j,k:longint;
begin
     read(n);
     for i:=1 to n do
         for j:=1 to n do
             for k:=1 to n do
                 read(a[i,j,k]);
end;

procedure pr;
var i,j,k:longint;
begin
     for i:=1 to n do
         for j:=1 to n do
             for k:=1 to n do
                 y[i,j,k]:=y[i,j,k-1]+a[j,k,i];
     for i:=1 to n do
         for j:=1 to n do
             for k:=1 to n do
                 x[i,j,k]:=x[i,j,k-1]+y[k,i,j];
     for i:=1 to n do
         for j:=1 to n do
             for k:=1 to n do
                 f[i,j,k]:=f[i-1,j,k]+x[i,j,k];
end;

function max(x,y:longint):longint;
begin
     if x>y then max:=x else max:=y;
end;

procedure wf;
var i,j,k,ii,jj,kk,l:longint;
begin
     re:=-maxlongint;
     for l:=1 to n do
         for i:=1 to n-l+1 do
             for j:=1 to n-l+1 do
                 for k:=1 to n-l+1 do
                 begin
                      ii:=i+l-1; jj:=j+l-1; kk:=k+l-1;
                      re:=max(re,f[ii,jj,kk]-f[ii,jj,k-1]-f[ii,j-1,kk]-f[i-1,jj,kk]+f[ii,j-1,k-1]
                                 +f[i-1,jj,k-1]+f[i-1,j-1,kk]-f[i-1,j-1,k-1]);
                 end;
     writeln(re);
end;

begin
     read(test);
     for it:=1 to test do
     begin
          rf;
          pr;
          wf;
     end;
end.

Download