Cod sursa(job #1957557)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 7 aprilie 2017 16:55:35
Problema Jocul Flip Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>
#include <stdio.h>
#define maxim 16

using namespace std;

int v[maxim][maxim];
char lin[maxim+1];
char col[maxim+1];

void inc_lin ( int l ) {
  int i = 0;
  while ( i < l && lin[i] == 1 ) {
    lin[i] = 0;
    i++;
  }

  if ( i < l ) {
    lin[i] = 1;
  }
}

/*void inc_col ( int c ) {
  int j = 0;
  while ( j < c && col[j] == 1 ) {
    col[j] = 0;
    j++;
  }

  if ( j < c ) {
    col[j] = 1;
  }
}*/

long long getsum ( int l, int c ) {
  long long s = 0;
  int i, j;

  for ( i = 0; i < l; i++ )
    for ( j = 0; j < c; j++ )
      if ( lin[i] + col[j] == 1 )
        s -= v[i][j];
      else
        s += v[i][j];

  return s;
}

long long _max ( int a, int b ) {
  if ( a > b )
    return a;
  else
    return b;
}

int main () {
  ifstream fin ( "flip.in" );
  ofstream fout ( "flip.out" );

  int l, c;

  fin>>l>>c;

  int i, j;

  for ( i = 0; i < l; i++ )
    for ( j = 0; j < c; j++ )
      fin>>v[i][j];

  long long s = 0LL, smax = -1000000LL, cs, k;

  for ( i = 0; i < 1<<l; i++ ) {
    for ( j = 0; j < c; j++ ) {
      for ( k = 0, cs = 0; k < l; k++ ) {
        if ( lin[k] == 0 )
          cs += v[k][j];
        else
          cs -= v[k][j];
      }

      if ( cs < 0 )
        col[j] = 1;
      else
        col[j] = 0;
    }

    smax = max ( smax, getsum ( l, c ) );
    inc_lin ( l );
  }

  fout<<smax<<'\n';

  fin.close ();
  fout.close ();

  return 0;
}