Cod sursa(job #411316)

Utilizator Teodor94Teodor Plop Teodor94 Data 4 martie 2010 20:27:14
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>

const int N=1<<5;

int a[N][N],v[N],b[N][N];

void baza2(int x)
{
	int nr=0;
	while (x)
	{
		nr++;
		v[nr]=x&1;
		x/=2;
	}
}

void init()
{
	for (int i=0;i<=16;i++)
		v[i]=0;
	for (int i=1;i<=16;i++)
		for (int j=1;j<=16;j++)
			a[i][j]=b[i][j];
}

int main()
{
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	int n,m;
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]);
			b[i][j]=a[i][j];
		}
	int x=1<<n,smax=1<<31;
	smax*=-1;
	for (int xx=0;xx<x;xx++)
	{
		baza2(xx);
		for (int i=1;i<=n;i++)
			if (v[i])
				for (int j=1;j<=m;j++)
					a[i][j]*=-1;
		for (int j=1;j<=m;j++)
		{
			int ss=0;
			for (int i=1;i<=n;i++)
				ss+=a[i][j];
			if (ss<0)
				for (int i=1;i<=n;i++)
					a[i][j]*=-1;
		}
		int s=0;
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
				s+=a[i][j];
		if (s>smax)
			smax=s;
		init();
		// vectorul v,modificam in functie de 0 si 1 coloanele matricei;
		// daca suma este negativa pe linie,modificam linia
	}
	printf("%d",smax);
	return 0;
}