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.

Download