Cod sursa(job #356012)

Utilizator Poisoned_IvyAnda Nicolae Poisoned_Ivy Data 13 octombrie 2009 00:12:03
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <stdio.h>
#include <stdlib.h>
int *x;
long max = -2147483645;

void citire(int *m, int *n, int ***a)
{
	int i, j, k;

	FILE *f = fopen("flip.in", "r");

	fscanf(f, "%d %d\n", n, m);

	//printf("m=%d  n=%d\n", *m,*n);

	*a = (int**) malloc ((*n)*sizeof(int*));

	x = (int*) malloc ((*m)*sizeof(int));

	for (i=0; i<*n; i++)
		(*a)[i] = (int*) malloc ((*m)*sizeof(int));

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

	/*for (i=0; i<*n; i++)
	{
		for (j=0; j<*m; j++)
			printf("%d ", (*a)[i][j]);
		printf("\n");
	}*/

	fclose(f);
}



//void back(int k, long *max, int **a, int m, int n)
void back(int k, int **a, int m, int n)
{
	int i,j;
	long s = 0, l;

	if (k < m)
	{
		x[k]=1;
		//back(k+1, max, a, m, n);
		back(k+1, a, m, n);
		x[k]=-1;
		//back(k+1, max, a, m ,n); 
		back(k+1, a, m ,n); 
	}

	else if (k == m)
	{
		s = 0;
		for(i=0; i<n; i++)
		{
			l=0;
			for(j=0; j<m; j++)
				l+=a[i][j]*x[j];
 
			s+=abs(l);

		}  
		if(s > max) 
			max = s;
	}
}


void scriere()
{
	FILE *g = fopen("flip.out", "w");
	
	fprintf(g, "%ld\n", max);

	fclose(g);
}


int main()
{
	int i, j, m, n, **a;

	//long max = -2147483645;

	citire(&m, &n, &a);
	
	/*printf("m=%d  n=%d\n", m,n);

	for (i=0; i<n; i++)
	{
		for (j=0; j<m; j++)
			printf("%d ", a[i][j]);
		printf("\n");
	}*/


	//back(0, &max, a, m, n);

	back(0, a, m, n);

	scriere();

	return 0;
}