Cod sursa(job #1602102)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 16 februarie 2016 15:41:28
Problema Jocul Flip Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.7 kb
type vector=array[1..16] of longint;
     tabel=array[1..16,1..16] of longint;
var v,q:vector;
    maxtab,tab:tabel;
     n,m,i,j,maxsum,c:longint;


  procedure flipcol;
var sum,i1,j1:integer;
 begin
   sum:=0;
   for j:=1 to c do
   begin
   for i:=1 to n do
    sum:=sum+maxtab[i,j];
   if sum<0 then
    begin
      for i1:=1 to n do
      maxtab[i1,j]:=maxtab[i1,j]*(-1);
    end;
   sum:=0;
  end;
   maxsum:=0;
  for i:=1 to n do
  for j:=1 to c do maxsum:=maxsum+maxtab[i,j];

 end;



 procedure flip(x:tabel);

 var i,j,sum:integer;
   begin
    sum:=0;
    for i:=1 to m do
    for j:=1 to c do
     x[q[i],j]:=x[q[i],j]*(-1);

    for i:=1 to n do
    for j:=1 to c do
     sum:=sum+x[i,j];
    if sum>maxsum then
     begin
      for i:=1 to n do
      for j:=1 to c do maxtab[i,j]:=x[i,j];
      maxsum:=sum;
     end;
     flipcol;
   end;


 procedure back(k:integer);
 var i:integer;

 begin
     // for i:=1 to m do  write(q[i],' ');
     // writeln;
     flip(tab);


       if k<=n then
        for i:=k to n do
        begin
          inc(m);
          q[m]:=v[i];
          back(i+1);
          dec(m);
        end;

 end;



begin
     assign(input,'flip.in'); reset(input);
     maxsum:=0;
     fillchar(maxtab,sizeof(maxtab),0);
     m:=0;
     readln(input,n,c);
     for i:=1 to n do
      for j:=1 to c do read(tab[i,j]);


     //for i:=1 to n do
       //begin
         //   for j:=1 to c do write(tab[i,j],' ');
           // writeln;
     //  end;
     for i:=1 to n do v[i]:=i;
     back(1);
     close(input);
     assign(output,'fin.out'); rewrite(output);
     write(output,maxsum);
     close(output);


end.