Cod sursa(job #593400)

Utilizator qwertyuPeter Eke qwertyu Data 2 iunie 2011 16:17:09
Problema Jocul Flip Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#define _CRT_SECURE_NO_DEPRECATE
#define ms 16

#include <stdlib.h>
#include <stdio.h>

int static a[ms][ms],n,m,g[ms],s[ms],s1,s2;

void back(int k);

int main(int argc, char **argv, char **env)
{
	FILE *fi = fopen("flip.in","r");

	fscanf(fi,"%d%d",&n,&m);

	//if (m<n)
	/*{
		for (int i=0;i<n;i++)
		for (int j=0;j<m;j++)
		{
			fscanf(fi,"%d",&a[j][i]);
		}

		n = m ^ n;
		m = m ^ n;
		n = m ^ n;
	}*/
	//else
	//{
		for (int i=0;i<n;i++)
		for (int j=0;j<m;j++)
		{
			fscanf(fi,"%d",&a[i][j]);
		}
	//}

	fclose(fi);
	s2=-((1<<31)-1);
	back(0);

	FILE *fo = fopen("flip.out","w");
	fprintf(fo,"%d",s2);
	fclose(fo);

	return 0;
}

void check();

void back(int k)
{
	int i;
	for (i=0;i<2;i++)
	{
		g[k]=i;
		if (k == n) check();
		else back(k+1);
	}
}

void check()
{
	for (int j=0; j<m; j++)
		s[j]=0;

	for (int i=0; i<n; i++)
	for (int j=0; j<m; j++)
	{
		if (g[i]) 
		{
			s[j]-=a[i][j]; 
		}
		else 
		{
			s[j]+=a[i][j];
		}
	}
	
	s1=0;
	for (int j=0; j<m; j++)
		if (s[j]>0) 
		{
			s1+=s[j];
		}
		else 
		{
			s1-=s[j];
		}

	if (s1>s2) s2=s1;

}