Pagini recente » Cod sursa (job #1418393) | Cod sursa (job #2351893) | Cod sursa (job #866350) | Cod sursa (job #2564859) | Cod sursa (job #58625)
Cod sursa(job #58625)
var f,g:text;
n,m,k:-17..16;
i,j:0..16;
st:array[1..32] of -16..16;
a,b:array[1..16,1..16] of longint;
as,ev:boolean;
s,max:longint;
procedure reinit;
begin
for i:=1 to n do for j:=1 to m do b[i,j]:=a[i,j];
end;
procedure citire;
begin
assign(f,'flip.in'); reset(f);
assign(g,'flip.out'); rewrite(g);
read(f,n,m);
for i:=1 to n do
for j:=1 to m do read(f,a[i,j]);
end;
procedure init;
begin
st[k]:=-m-1;
end;
procedure succesor;
begin
if (st[k]<n) and (k<=n) then begin
st[k]:=st[k]+1;
as:=true;
end
else as:=false;
end;
procedure valid;
begin
ev:=true;
for i:=1 to k-1 do if (st[i]>=st[k]) or (st[i]=0) then ev:=false;
end;
procedure tipar;
begin
s:=0;
reinit;
for i:=1 to k do
if st[i]>0 then for j:=1 to m do b[st[i],j]:=-b[st[i],j]
else for j:=1 to n do b[j,-st[i]]:=-b[j,-st[i]];
for i:=1 to n do for j:=1 to m do s:=s+b[i,j];
if s>max then max:=s;
end;
begin
citire;
max:=-256000001;
k:=1;
init;
while k>0 do begin
repeat
succesor;
if as then valid;
until (not as) or (as and ev);
if as then begin
tipar;
k:=k+1;
init;
end
else k:=k-1;
end;
write(g,max);
close(g);
end.