Cod sursa(job #42659)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 29 martie 2007 13:34:28
Problema Jocul Flip Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.85 kb
{
    Jocul Flip
}

Program Flip;

Type Matrice = array[1..16,1..16] of Longint;
     Vector = array[1..16] of ^Shortint;

Var  a : matrice;
     suma, st : longint;
     n, m, i, j, k : byte;
     s : ^Vector;
     cod1 :Boolean;

Function sumaMatrix : Longint;
Var i, j : integer;
    sm, s1 : Longint;
Begin
     sm := 0;
     For j := 1 to m do
         Begin
            s1 := 0;
            For i := 1 to n do if s^[i]^ = 1 then s1 := s1-a[i,j]
                                             else s1 := s1+a[i,j];
            if s1 < 0 then sm := sm -s1 else sm := sm +s1;
         End;
     sumaMatrix := sm;
End;

Begin
     Assign( input, 'flip.in' );
     Reset( input );
            Readln( n, m );
            For i := 1 to n do
                For j := 1 to m do
                    Read( a[i,j] );
     Close( input );
     New( s );
     For i := 1 to n do Begin New( s^[i] ); s^[i]^ := 0; End;

     k := 1;
     suma := 0;
     s^[k]^ := -1;
     Repeat
           Repeat
                 If ( s^[k]^ < 1 ) then
                    Begin
                        cod1 := true;
                        s^[k]^ := s^[k]^ +1;
                    End
                    else cod1 := false;
           Until ( not cod1 ) or ( ( cod1 ) and ( k <= n ) );
           if cod1 then
              if k = n then
                Begin
                    st := sumaMatrix;
                    if st > suma then suma := st;
                End
                else
                Begin
                    k := k+1;
                    s^[k]^ := -1;
                End
              else
              k := k-1;
     Until k = 0;

     Assign( output, 'flip.out' );
     Rewrite( output );
              Writeln( suma );
     Close( output );

     for k := 1 to n do
        dispose( s^[k] );
     dispose( s );
End.