Cod sursa(job #260541)

Utilizator skullLepadat Mihai-Alexandru skull Data 17 februarie 2009 10:36:53
Problema Jocul Flip Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.74 kb

type stiva=array [1..16] of byte;

var st:stiva;
    a,b:array [1..16,1..16] of longint;
    n,m:byte;
    max,s:longint;
    f,g:text;

procedure citire;
var i,j:byte;
          begin
          assign(f,'flip.in');
          reset(f);
          readln(f,n,m);
          for i:=1 to n do
              for j:=1 to m do
                  begin
                  read(f,a[i,j]);
                  s:=s+a[i,j];
                  end;
          close(f);
          end;

procedure prg(st:stiva;k:byte);
var i,j:byte;
    ss,suma:longint;
          begin
          suma:=s;
          b:=a;
          for i:=1 to k do
              for j:=1 to m do
                  begin
                  suma:=suma+(b[i,j]*-1)-b[i,j];
                  b[i,j]:=b[i,j]*-1;
                  end;

          for j:=1 to m do
              begin
              ss:=0;
              for i:=1 to n do
                  ss:=ss+b[i,j];
              if ss<0 then
                 for i:=1 to n do
                     suma:=suma+b[i,j]*-1-b[i,j];
              end;

          if suma>max then
             max:=suma;
          end;

function valid(k,c:byte):boolean;
var i:byte;
         begin
         valid:=true;
         for i:=1 to k-1 do
             if st[i]=c then
                valid:=false;
         end;

procedure back(k:byte);
var i:byte;
          begin
          if k>1 then
             prg(st,k-1);
             for i:=1 to n do
                 if valid(k,i) then
                    begin
                    st[k]:=i;
                    back(k+1);
                    end;
          end;

begin

s:=0;
citire;
max:=-maxint;
back(1);
assign(g,'flip.out');
rewrite(g);
write(g,max);
close(g);
end.