Cod sursa(job #74385)

Utilizator CoolYceStanciucuCatalin CoolYce Data 25 iulie 2007 13:08:18
Problema Jocul Flip Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.53 kb
var i,j,n,m,z:integer;    smax,min,min2:longint;
    a:array[1..17,1..17]of longint;
    col,lin:array[1..17]of longint;

procedure citire;
begin
assign(input,'flip.in');
reset(input);
readln(n,m);
smax:=0;
for i:=1 to n do begin
  for j:=1 to m do begin
      read(a[i,j]);
      inc(col[j],a[i,j]);
      inc(lin[i],a[i,j]);
      inc(smax,a[i,j]);
      end;
  readln;
  end;
close(input);
end;

procedure minlin;
begin
for i:=1 to n do
  if lin[i]<0 then begin
    inc(z);
    inc(min,lin[i]);
    end;
end;

procedure mincol;
begin
for i:=1 to m do
  if col[i]<0 then begin
    inc(z);
    inc(min2,col[i]);
    end;
end;

procedure rezolvare;
begin
z:=0;
min:=0;   min2:=0;
minlin;
mincol;
while z<>0 do
  if min2<min then begin
    for j:=1 to m do
      if col[j]<0 then begin
        col[j]:=-col[j];
        smax:=smax+2*col[j];
        for i:=1 to n do begin
           a[i,j]:=-a[i,j];
           inc(lin[i],2*a[i,j]);
           end;
        end;
    min:=0;   min2:=0;
    z:=0;
    minlin;
    end
              else begin
    for i:=1 to n do
      if lin[i]<0 then begin
        lin[i]:=-lin[i];
        smax:=smax+2*lin[i];
        for j:=1 to m do begin
            a[i,j]:=-a[i,j];
            inc(col[j],2*a[i,j]);
            end;
        end;
    min:=0;   min2:=0;
    z:=0;
    mincol;
    end;
end;

procedure afisare;
begin
assign(output,'flip.out');
rewrite(output);
writeln(smax);
close(output);
end;

begin;
citire;
rezolvare;
afisare;
end.