Cod sursa(job #1580606)

Utilizator cretu_cipriancretu ciprian cretu_ciprian Data 25 ianuarie 2016 22:39:25
Problema Jocul Flip Scor 70
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.6 kb
program infoarena_flip;

type stiva=array[1..100]of -1..1;
var ams,ev:boolean;
  m,n,k,max:longint;
  st:stiva;
  a:array[1..16,1..16] of longint;
  f:text;
  procedure citire;
  var  i,j:longint;
    begin
    assign(f,'flip.in');reset(f);
    read(f,n,m);
     for i:=1 to n do
     begin
       readln(f);
       for j:=1 to m do
        read(f,a[i,j]);
     end;
     close(f);

    end;
  procedure tipar;
var i,j,s,si:longint;
  b:array[1..16,1..16]of longint;
  c:array[1..16] of longint;
begin    {
for i:=1 to n do
for j:=1 to m do
  b[i,j]:=a[i,j];
for i:=1 to n do
  if st[i]=1 then for j:=1 to m do b[i,j]:=-b[i,j];
for i:=n+1 to n+m do
if st[i]=1 then for j:=1 to n do b[j,i-n]:=-b[j,i-n];
s:=0;
for i:=1 to n do
for j:=1 to m do
s:=s+b[i,j];
if s>max then max:=s;    }

for i:=1 to n do
for j:=1 to m do
  b[i,j]:=a[i,j];
for i:=1 to n do
  if st[i]=1 then for j:=1 to m do b[i,j]:=-b[i,j];
s:=0;
for i:=1 to n do
for j:=1 to m do
s:=s+b[i,j];
if s>max then max:=s;
 for i:=1 to m do c[i]:=0;
 for i:=1 to n do
 for j:=1 to m do
 c[j]:= c[j]+b[i,j]; si:=s;
 for i:=1 to m do
 if c[i]<0 then begin
   si:=si-2*c[i];
   end;
   if si>max then max:=si;
end;

begin
   citire;
   max:=0;
  k:=1;st[k]:=-1;
  while (k>0) do
  begin
    repeat
      ams:=(st[k]<1);
      if ams then st[k]:=st[k]+1;
      ev:=true;
      until (not ams)or(ams and ev);
      if ams then if (k=(n)) then tipar
                                else begin k:=k+1;st[k]:=-1;end
            else k:=k-1;
  end;
  assign(f,'flip.out');rewrite(f);write(f,max);close(f);
end.