Cod sursa(job #135733)

Utilizator bishoppAlex Cristian bishopp Data 14 februarie 2008 13:04:21
Problema Jocul Flip Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.79 kb
type matrice=array[1..16,1..16] of longint;
     stiva=array[1..16] of integer;
var a,b:matrice;
    st:stiva;
    as:boolean;
    f,g:text;
    maxi,maxim,suma:longint;
    n,m,i,j,k:byte;

procedure succesor(var st:stiva;k:integer;var as:boolean);
begin
if st[k]<1 then begin
                inc(st[k]);
                as:=true;
                end
           else as:=false;
end;


procedure verif;
var s:longint;
    x:byte;
    ok:boolean;
begin
ok:=false;
for i:=1 to n do if st[i]=1 then begin
                                 for j:=1 to m do a[i,j]:=-a[i,j];
                                 ok:=true;
                                 end;
if ok then
for j:=1 to m do begin
    s:=0;
    for i:=1 to n do s:=s+a[i,j];
    if -s>s then for x:=1 to n do a[x,j]:=-a[x,j];
    end;
suma:=0;
for i:=1 to n do
    for j:=1 to n do suma:=suma+a[i,j];
for i:=1 to n do
    for j:=1 to n do a[i,j]:=b[i,j];
end;



begin
assign(f,'flip.in');reset(f);
assign(g,'flip.out');rewrite(g);
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;
for i:=1 to n do
    for j:=1 to n do b[i,j]:=a[i,j];
k:=1;
st[k]:=-1;
maxi:=-maxint;
while k>0 do begin
             repeat
             succesor(st,k,as);
             until as or not as;
             if as then if k=n then begin
                                    verif;
                                    if suma>maxi then maxi:=suma;
                                    end
                                      else begin
                                           inc(k);
                                           st[k]:=-1;
                                           end
                   else dec(k);
             end;
writeln(g,maxi);
close(f);
close(g);
end.