Cod sursa(job #864082)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 24 ianuarie 2013 17:39:15
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

ifstream fin("flip.in");
ofstream fout("flip.out");

int v[16][16];
int n,m;
int maxim,suma,minus_linie[16],minus_coloana[16];

int semn(int i,int j)
{
	if(minus_linie[i]^minus_coloana[j]==1)
		return -1;
	return 1;
}

int suma_linie(int linie)
{
	int i;
	int s=0;
	for(i=0;i<m;i++)
	{
		s+=(v[linie][i]*semn(linie,i));
	}
	return s;
}

void back_coloana(int poz)
{
	if(poz==m)
	{
		int i;
		suma=0;
		for(i=0;i<n;i++)
			suma+=suma_linie(i);
		if(suma>maxim)maxim=suma;
	}
	else
	{
		back_coloana(poz+1);
		
		minus_coloana[poz]=1;
		back_coloana(poz+1);
		minus_coloana[poz]=0;
	}
}

void back_linie(int poz)
{
    if(poz==n)
		back_coloana(0);
	else
	{
		back_linie(poz+1);
		
		minus_linie[poz]=1;
		back_linie(poz+1);
		minus_linie[poz]=0;
	}
}


int main()
{
	int i,j;
	fin>>n>>m;
	maxim=-256000256; //mai mult trebuie
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			fin>>v[i][j];
		back_linie(0);
	fout<<maxim<<'\n';
	
	fin.close();
	fout.close();
	
	return 0;
}