Cod sursa(job #467839)

Utilizator rusu_raduRusu Radu rusu_radu Data 30 iunie 2010 21:52:34
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <cassert>
#define Nmax 18
#define INF -400000000
#define InFile "flip.in"
#define OutFile "flip.out"

using namespace std;

int n, m, mx=INF;
int sol[Nmax];
int M[Nmax][Nmax];

void read();
void back (int);
int suma();
void write();

int main()
{
  assert (freopen (InFile, "r", stdin));
  assert (freopen (OutFile, "w", stdout));
  read();
  back (1);
  write();
  return 0;
}

void read()
{
  int i, j;
  scanf ("%d %d\n", &n, &m);
  for (i=1; i<=n; i++)
    for (j=1; j<=m; j++)
      scanf ("%d ", &M[i][j]);
}

void back (int k)
{
  int x;
  if (k==m+1)
    x=suma(), mx=x>mx?x:mx;
  else
  {
    for (int i=0; i<2; i++)
    {
      sol[k]=i;
      back (k+1);
    }
  }
}

int suma()
{
  int i, j, ax, rez=0;
  for (i=1; i<=n; i++)
  {
    ax=0;
    for (j=1; j<=m; j++)
      ax+=sol[j]?(-M[i][j]):M[i][j];
    if (ax<0) ax=-ax;
    rez+=ax;
  }
  return rez;
}

void write()
{
  printf ("%d\n", mx);
}