Cod sursa(job #1378624)

Utilizator kor663Docolin Alexandru kor663 Data 6 martie 2015 13:19:15
Problema Jocul Flip Scor 0
Compilator fpc Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul II Marime 1.56 kb
type mat= array [0..16,0..16] of longint;


procedure cit(var a: mat; m,n: integer);
var i,j: integer;
    f: text;
begin
    assign(f,'flip.in'); reset(f);
    readln(f,m,n);
    for i:= 1 to m do
        for j:= 1 to n do
            if (i=0) or (j=0) then a[i,j]:=0
                              else read(f,a[i,j]);
    close(f);
    for i:= 1 to m do a[i,0]:=0;
    for i:= 1 to n do a[0,i]:=0;
end;

procedure tip(max: qword);
var f: text;
begin
    assign(f,'flip.out'); rewrite(f);
    writeln(f,max);
    close(f);
end;

function sum(a: mat; n,m: integer; s1: string): qword;
var i,j: integer;
    s: qword;
begin
    s:=0;
    for i:= 1 to m do
        for j:= 1 to n do
            if (s1[i]='1') xor (s1[m+j]='1') then s:=s-a[i,j]
                                      else s:=s+a[i,j];
    sum:=s;
end;

procedure back(var max: qword; var q: qword; var p,n,m: integer; var s1: string; a: mat);
var i: integer;
begin
        if p=0 then begin
                    q:= sum(a,n,m,s1);
                    if q>max then max:=q;
                    end
               else for i:= 1 to 2 do
                        if i=1 then begin s1:=s1+'0'; dec(p); back(max,q,p,n,m,s1,a); delete(s1,length(s1),1); end
                           else begin s1:=s1+'1'; dec(p); back(max,q,p,n,m,s1,a); delete(s1,length(s1),1); end;
end;


procedure rezolv;
var a: mat;
    m,n,p: integer;
    q,max: qword;
    s1: string;
begin
    cit(a,n,m);
    p:=m+n;
    s1:='';
    back(max,q,p,n,m,s1,a);
    tip(max);
end;


begin{pp}
rezolv;
end.