Cod sursa(job #554355)

Utilizator MihaicorneliuMihai Pojar Mihaicorneliu Data 14 martie 2011 19:42:54
Problema Jocul Flip Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.37 kb
program flip;
type matrice=array[1..16,1..16] of longint;
var t:matrice;
    m,n:byte;
    smax:longint;

procedure citire;
var f:text;
    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
      read(f,t[i,j]);
  close(f)
end;

procedure afisare;
var f:text;
begin
  assign(f,'flip.out');
  rewrite(f);
  write(f,smax);
  close(f)
end;

procedure fliplinie(i:byte);
var j:byte;
begin
  for j:=1 to m do
    t[i,j]:=-t[i,j]
end;

procedure flipcoloana(j:byte);
var i:byte;
begin
  for i:=1 to n do
    t[i,j]:=-t[i,j]
end;

function suma:longint;
var i,j:byte;
    s:longint;
begin
  s:=0;
  for i:=1 to n do
    for j:=1 to m do
      s:=s+t[i,j];
  suma:=s
end;

function suma_col(j:byte):longint;
var i:byte;
    s:longint;
begin
  s:=0;
  for i:=1 to n do
    s:=s+t[i,j];
  suma_col:=s
end;

procedure back(i:byte);
var j,k:byte;
    s_col,s:longint;
begin
  if i<=n then
  begin
    fliplinie(i);
    back(i+1);
    fliplinie(i);
    back(i+1)
  end
  else
  begin
    s:=0;
    for j:=1 to m do
    begin
      s_col:=suma_col(j);
      if s_col<0 then
      begin
        flipcoloana(j);
        s_col:=-s_col
      end;
      s:=s+s_col
    end;
    if s>smax then
      smax:=s
  end
end;
begin
  citire;
  smax:=0;
  back(1);
  afisare
end.