Cod sursa(job #110151)

Utilizator rethosPaicu Alexandru rethos Data 25 noiembrie 2007 18:47:07
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream.h>
long a[17][17],b[17][17];
int n,m,v[17];
long long s,smax;
int verif()
{ int i;
  for (i=1;i<=n;i++) if (v[i]==-1) return 1;
  return 0;
}
float suma(int j)
{ int i;
  float suma=0;
  for (i=1;i<=n;i++)
	suma+=b[i][j];
  return suma;
}
void flip(int j)
{ int i;
  for (i=1;i<=n;i++)
	b[i][j]=-b[i][j];
}
int main()
{ int i,j;
  long aux;
  ifstream f("flip.in");
  ofstream g("flip.out");
  f>>n>>m;
  for (i=1;i<=n;i++)
	for (j=1;j<=m;j++) f>>a[i][j];
  if (n>m)
	{ for (i=2;i<=n;i++)
		for (j=1;j<=m&&j<i;j++)
			{ aux=a[i][j];
			  a[i][j]=a[j][i];
			  a[j][i]=aux;
			}
	  aux=n;
	  n=m;
	  m=aux;
	}
  f.close();
  for (i=1;i<=n;i++) v[i]=-1;
  v[i]=0;
  while (verif())
	{ for (i=1;i<=n;i++)
		{ if (v[i]==0) { v[i]=-1;break;}
		  else if (v[i]==1) v[i]=-1;
			else { v[i]=1;break;}
		}
	  for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			b[i][j]=a[i][j]*v[i];
	  for (j=1;j<=m;j++)
		if (suma(j)<0) flip(j);
	  s=0;
	  for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			s+=b[i][j];
	  if (s>smax) smax=s;
	}
  g<<smax;
  g.close();
  return 0;
}