MAXCUB - Khối lập phương lớn nhất
Tác giả: RR
Ngôn ngữ: Pascal
PROGRAM MaxCub;
CONST
fi='';
fo='';
maxn=30;
VAR
n:byte;
t:array[0..maxn,0..maxn,0..maxn] of longint;
f1,f2:text;
kq:longint;
timeold:longint;
stop:boolean;
Procedure OpenFiles;
Begin
Assign(f1,fi); Reset(f1);
Assign(f2,fo); Rewrite(f2);
End;
Procedure CloseFiles;
Begin
Close(f1); Close(f2);
End;
Procedure ReadInput;
Var
k,i,j:byte;
a:longint;
Begin
Readln(f1,n);
kq:=-maxlongint;
stop:=true;
For k:=1 to n do
For i:=1 to n do
begin
For j:=1 to n do
begin
Read(f1,a);
If a<0 then stop:=false;
If a>kq then kq:=a;
t[k,i,j]:=a+t[k-1,i,j]+t[k,i-1,j]+t[k,i,j-1]
-t[k-1,i-1,j]-t[k-1,i,j-1]-t[k,i-1,j-1]+t[k-1,i-1,j-1];
If (i=j) and (j=k) then
If t[k,i,j]>kq then kq:=t[k,i,j];
end;
end;
End;
Procedure Find;
Var
v,i,j,k:byte;
s:longint;
Begin
For v:=1 to n-1 do
begin
For k:=0 to n-v-1 do
For i:=0 to n-v-1 do
For j:=0 to n-v-1 do
begin
s:=t[k+v+1,i+v+1,j+v+1]-t[k+v+1,i+v+1,j]-t[k+v+1,i,j+v+1]-t[k,i+v+1,j+v+1]
+t[k+v+1,i,j]+t[k,i+v+1,j]+t[k,i,j+v+1]-t[k,i,j];
If s>kq then kq:=s;
end;
end;
End;
Procedure WriteOutput;
Begin
Writeln(f2,kq);
End;
Procedure Solve;
Var
st,i:integer;
Begin
OpenFiles;
Readln(f1,st);
For i:=1 to st do
begin
ReadInput;
If not stop then Find;
WriteOutput;
end;
CloseFiles;
End;
BEGIN
Solve;
END.