Cod sursa(job #27605)

Utilizator IronWingVlad Paunescu IronWing Data 6 martie 2007 20:38:16
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream.h>
#include <stdlib.h>
int n, m;
long a[6][6], b[20][20];
int h[20], g[20];
long smax;
void citire()
{int i, j;
ifstream f("flip.in");
f>>n>>m;
for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	f>>a[i][j];
}
long sum()
{ int i ,j;
	long s=0;
 for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	s+=a[i][j];
return s;
}
void copiaza()
{ int i, j;
 for(i=1;i<=n;i++)
	 for(j=1;j<=m;j++)
	 b[i][j]=a[i][j];
}
void min1(int l)
{ for(int j=1;j<=m;j++)
	a[l][j]*=-1;
}
void min2(int c)
{ for(int i=1;i<=n;i++)
  a[i][c]*=-1;
}
long suma(int c)
 { long s=0;
 for(int i=1;i<=n;i++)
	s+=a[i][c];
return s;
}
long suma1(int l)
{ long s=0;
 for(int j=1;j<=m;j++)
  s+=a[l][j];
return s;
}
void rest()
{ for(int i=0;i<=n;i++)
	  for(int j=0;j<=m;j++)
		 a[i][j]=b[i][j];
}
void flip(int l)
{
int i,j; long s;  int gas=0;
s=sum();
 if(s>smax) smax=s;
 if(l<=n)
 {  for(i=1;i<=n;i++)
  {   for(int k=i;k<=n;k++)
  {
		  min1(i);
		 for(j=1;j<=m;j++)
		 {  gas=0;
		  if(suma(j)<0)  {	 min2(j);    gas=1;  }
			 flip(l+1);
		  if(gas) min2(j);

		 }
		  min1(i);
	 }
  }
  }
 }
void afisare()
{ ofstream g("flip.out");
	g<<smax;
	g.close();
}
int main()
{ citire();
  smax=sum();
  flip(1);
  afisare();
  return 0;
}