Cod sursa(job #281569)

Utilizator pykhNeagoe Alexandru pykh Data 15 martie 2009 13:03:49
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream.h>
#define F(i,a,b) for(i=(a);i<=(b);i++)
ifstream fin("flip.in");
ofstream fout("flip.out");

int n,m,a[17][17],b[17][17],c[17][17],v[17],max=0;

void citire()
	{
	int i,j;
	fin>>n>>m;
	F(i,1,n)
	F(j,1,m)
	{
	fin>>c[i][j];
	b[i][j]=c[i][j];
	}
	}

void maxim()
	{
	int i,j,s=0;
	F(i,1,n)
	F(j,1,m)
	a[i][j]=c[i][j];
	F(i,1,m)
		if(v[i]==2)
			F(j,1,n)
				a[j][i]*=-1;
	F(i,1,n)
	F(j,1,m)
		s+=a[i][j];
		if(s>=max)
			{
			max=s;
			F(i,1,n)
			F(j,1,m)
				b[i][j]=a[i][j];
			}

	}

void mmm()
	{
	int i,j,s=0,w;
	F(i,1,n)
	for(j=1,s=0;j<=m;j++)
	{
	s+=b[i][j];
	if((j==m)&&(s<0))
		F(w,1,m)
		b[i][w]*=-1;
		}
	}
void back(int k)
	{
	int i;
	if (k==m+1)maxim();
	else F(i,1,2)
		{
		v[k]=i;
		back(k+1);
		}
	}


void afisare()
	{
	int i,j;
	max=0;
	F(i,1,n)
	F(j,1,m)
	max+=b[i][j];
	fout<<max;
	}

int main()
	{
	citire();
	//back(1);
	mmm();
	back(1);
	mmm();
	afisare();
	return 0;
	}