Cod sursa(job #593383)

Utilizator qwertyuPeter Eke qwertyu Data 2 iunie 2011 15:42:20
Problema Jocul Flip Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 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");

	//fill(a,ms*ms,1);

	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);

	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++)
	{
		s[j]+= g[i] ? -a[i][j] : a[i][j];
	}
	
	s1=0;
	for (int j=0; j<m; j++)
		s1+=abs(s[j]);

	if (s1>s2) s2=s1;
}