MMATRIX - SHIFT Operator on Matrix

Tác giả: ll931110

Ngôn ngữ: Pascal

{$MODE DELPHI}
Program MMATRIX;
Const
  input  = '';
  output = '';
  maxn = 7;
  maxv = 100000;
Var
  fi,fo: text;
  m,n: integer;
  a: array[1..maxn,1..maxn] of integer;
  d: array[1..maxn] of integer;

Procedure openfile;
Begin
  Assign(fi, input);
    Reset(fi);

  Assign(fo, output);
    Rewrite(fo);
End;

Procedure init;
Var
  i,j: integer;
Begin
  For i:= 1 to n do
    For j:= 1 to n do read(fi, a[i,j]);
End;

Procedure calc;
Var
  val,tmp: integer;
  i,j,k: integer;
Begin
  val:= 0;
  For i:= 1 to n do
    Begin
      tmp:= 0;
      For j:= 1 to n do
        Begin
          k:= i - d[j];
          If k <= 0 then k:= k + n;
          tmp:= tmp + a[j,k];
        End;
      If val < tmp then val:= tmp;
      If val > m then exit;
    End;
  If m > val then m:= val;
End;

Procedure attempt(i: integer);
Var
  j: integer;
Begin
  For j:= 1 to n do
    Begin
      d[i]:= j;
      If i = n then calc else attempt(i + 1);
    End;
End;

Procedure closefile;
Begin
  Close(fo);
  Close(fi);
End;


Procedure printresult;
Begin
  m:= maxv;
  attempt(1);
  Writeln(fo, m);
End;

Begin
  openfile;

  Repeat
    Readln(fi, n);
    If n <> -1 then
      Begin
        init;
        printresult;
      End;
  Until n = -1;

  closefile;
End.

Download