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.