Cod sursa(job #708045)

Utilizator lunat1cHobinca Bogdan lunat1c Data 6 martie 2012 12:31:35
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

using namespace std;

int a[17][17], n, m, smax=0;

void citire()
{
	scanf("%d%d", &n, &m);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			scanf("%d", &a[i][j]);
}

int numarare(int a[17][17])
{
	int sum=0;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			sum+=a[i][j];
	return sum;
}

void flip(int p, char c, int a[17][17])
{
	if(c=='c')
	{
		for(int i=1; i<=n; i++)
			a[i][p]=a[i][p]*-1;
		return;
	}
	for(int i=1; i<=m; i++)
		a[p][i]=a[p][i]*-1;
}

void back(int a[17][17], int l, int c)
{
	int sum=numarare(a);
	if(smax<sum) smax=sum;
	for(int i=l; i<=n; i++)
	{
		flip(i,'l',a);
		back(a,l+1,c);
		flip(i,'l',a);
	}
	for(int j=c; j<=m; j++)
	{
		flip(j,'c',a);
		back(a,l,c+1);
		flip(j,'c',a);
	}
}

int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    citire();
	back(a,1,1);
	printf("%d", smax);
    return 0;
}