Cod sursa(job #260531)

Utilizator skullLepadat Mihai-Alexandru skull Data 17 februarie 2009 10:31:07
Problema Jocul Flip Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.89 kb
{$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
{$M 16384,0,655360}

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

var st:stiva;
    a: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;
          for i:=1 to k do
              for j:=1 to m do
                  begin
                  suma:=suma+(a[i,j]*-1)-a[i,j];
                  a[i,j]:=a[i,j]*-1;
                  end;

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

          if suma>max then
             max:=suma;
          for i:=1 to k do
              for j:=1 to m do
                  a[i,j]:=a[i,j]*-1;
          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.