Cod sursa(job #593966)

Utilizator SteveStefan Eniceicu Steve Data 5 iunie 2011 17:36:36
Problema Jocul Flip Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream.h>

long b[16][16], bv[16][16];
int m, n;

void cutzu()
{
	for (int lk=0; lk<n; lk++)
	{
		for (int kl=0; kl<m; kl++)
		{
			b[lk][kl]=bv[lk][kl];
		}
	}
}

long sumacoloana(int w)
{
	long S2=0;
	for (int e=0; e<n; e++)
	{
		S2+=b[e][w];
	}
	if (S2<0) return -S2;
	return S2;
}

void flip_linie(int l)
{
	for (int p=0; p<m; p++)
	{
		b[l][p]*=-1;
	}
}

int main()
{
	int i, j, u;
	int v[18];
	long max=-256000000, S;
	ifstream ins;
	ins.open("flip.in");
	ins>>n>>m;
	for (i=0; i<n; i++)
	{
		for (j=0; j<m; j++)
		{
			ins>>b[i][j];
			bv[i][j]=b[i][j];
		}
	}
	for (u=0; u<=m; u++)
	{
		v[u]=0;
	}
	while (v[m]==0)
	{
		S=0;
		v[0]++;
		cutzu();
		for (int y=0; y<m; y++)
		{
			if (v[y]==2)
			{
				v[y+1]++;
				v[y]=0;
			}
			else break;
		}
		for (int t=0; t<m; t++)
		{
			if (v[t]==1) flip_linie(t);
		}
		for (int asdf=0; asdf<n; asdf++)
		{
			S+=sumacoloana(asdf);
		}
		if (max<S) max=S;
	}
	ins.close();
	ofstream ous;
	ous.open("flip.out");
	ous<<max;
	ous.close();
	return 0;
}