Cod sursa(job #27717)

Utilizator IronWingVlad Paunescu IronWing Data 6 martie 2007 23:34:54
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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 invl(int l)
{ for(int j=1;j<=m;j++)
	a[l][j]*=-1;
}
void invc(int c)
{ for(int i=1;i<=n;i++)
  a[i][c]*=-1;
}
long sumac(int c)
 { long s=0;
 for(int i=1;i<=n;i++)
	s+=a[i][c];
return s;
}
long sumal(int l)
{ long s=0;
 for(int j=1;j<=m;j++)
  s+=a[l][j];
return s;
}
int u[20];
void scrie()
  { for(int i=1;i<=m;i++)
	  u[i]=0;
  }
void flip(int l)
{
int i,j; long s;  int gas=0;
if(l==n+1)
		 { s=sum();
			if(smax<s) smax=s;
		 for(j=1;j<=m;j++)
			 {
			 if(sumac(j)<0) { invc(j);  u[j]=1; }
			 }
		  s=sum();
		 if(smax<s) smax=s;
			for(j=1;j<=m;j++)
			{ if(u[j]==1) invc(j);
			}
       scrie();
		 }
 else { invl(l);
		  flip(l+1);
		  invl(l);
		  flip(l+1);
		 }

}

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