Cod sursa(job #557393)

Utilizator sergiu.apostulApostul Sergiu sergiu.apostul Data 16 martie 2011 17:14:10
Problema Jocul Flip Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.38 kb
program flip03;
type matrice=array[1..16,1..16]of longint;
var a:matrice;
    f:text;
    m,n,i,j:byte;
    sf:longint;

function suma:longint;
 var j,i:byte;
     s:longint;
 begin
  s:=0;
  for i:=1 to n do
   for j:=1 to m do
    s:=s+a[i,j];
  suma:=s;
 end;

 function sumac(nrc:byte):longint;
  var i:byte;
      s:longint;
  begin
   s:=0;
   for i:=1 to n do
    s:=s+a[i,nrc];
   sumac:=s;
  end;

 procedure flipc(j:byte);
  var i:byte;
  begin
   for i:=1 to n do
    a[i,j]:=-1*a[i,j];
  end;

 procedure flipl(i:byte);
  var j:byte;
  begin
   for j:=1 to n do
    a[i,j]:=-1*a[i,j];
  end;

 procedure rez(i:byte);
 var j,p,k:byte;
     s,sc:longint;
 begin
  if i=n+1 then
   begin
    s:=0;
    for p:=1 to m do
     begin
      sc:=sumac(p);
      if sc<0 then
       begin
        flipc(p);
        sc:=-sc;
       end;
      s:=s+sc;
     end;
    if s>sf then
     sf:=s;
    end
   else
    for k:=1 to 2 do
     if k=1 then
      begin
       flipl(i);
       rez(i+1);
       flipl(i);
      end
     else
      rez(i+1);
  end;

 begin{main}
  assign(f,'flip.in');
  reset(f);
  readln(f,n,m);
  for i:=1 to n do
   begin
    for j:=1 to m do
     read(f,a[i,j]);
    readln(f);
   end;
  close(f);
  sf:=0;
  rez(1);
  assign(f,'flip.out');
  rewrite(f);
  writeln(f,sf);
  close(f);
end.