MMATRIX - SHIFT Operator on Matrix
Tác giả: khuc_tuan
Ngôn ngữ: Pascal
// {$APPTYPE CONSOLE}
{$mode delphi}
var
best, i, j, n : integer;
a, b : array[1..7,1..7] of integer;
p : array[1..7] of integer;
procedure duyet(step : integer);
var
i, j, k, localmax : integer;
begin
if step > n then
begin
for i := 1 to n do
begin
k := p[i];
for j:=1 to n do
begin
b[i,j] := a[i,k];
inc(k);
if k > n then k := 1;
end;
end;
localmax := 0;
for j:=1 to n do
begin
k := 0;
for i:=1 to n do k := k + b[i,j];
if localmax < k then localmax := k;
end;
if best > localmax then best := localmax;
exit;
end;
for k := 1 to n do
begin
p[step] := k;
duyet(step+1);
end;
end;
begin
while true do
begin
read(n);
if n=-1 then break;
for i:=1 to n do
begin
for j:=1 to n do
read(a[i,j]);
end;
p[1] := 1;
best := 1000000000;
duyet(2);
writeln(best);
end;
end.