Cod sursa(job #51714)

Utilizator h_istvanHevele Istvan h_istvan Data 16 aprilie 2007 16:17:26
Problema Jocul Flip Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.57 kb
program flip;
type sor = record
           no,po:longint;
           end;

var f:text;
    t:array[1..16,1..16] of longint;
    v:array[1..16] of sor;
    m,n,i,j:byte;
    max:longint;

procedure atrendez(j:byte);
var i:byte;
begin
     for i:=1 to n do
         begin
              v[i].po:=v[i].po-t[i,j];
              v[i].no:=v[i].no-t[i,j];
         end;
end;

procedure visszarendez(j:byte);
var i:byte;
begin
     for i:=1 to n do
         begin
              v[i].po:=v[i].po+t[i,j];
              v[i].no:=v[i].no+t[i,j];
         end;
end;

function maximum:longint;
var i:byte;
    m:longint;
begin
     m:=0;
     for i:=1 to n do
         m:=m+abs(v[i].po+v[i].no);
     maximum:=m;
end;

procedure maxkeres(d:byte);
var mx:longint;
begin
     if (d<=m) then
     begin
          maxkeres(d+1);
          atrendez(d);
          maxkeres(d+1);
          visszarendez(d);
     end else
     begin
          mx:=maximum;
          if(mx > max) then max:=mx;
     end;
end;

begin
     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,t[i,j]);
          readln(f);
     end;
     close(f);

     for i:=1 to n do
         for j:=1 to m do
         begin
             if (t[i,j] >= 0) then v[i].po:=v[i].po+t[i,j]
                              else v[i].no:=v[i].no+t[i,j];
             max:=max+t[i,j];
         end;

     maxkeres(1);

     assign(f,'flip.out');
     rewrite(f);
     writeln(f,max);
     close(f);
end.