Cod sursa(job #232933)

Utilizator algoritmarOvidiu Andrei algoritmar Data 16 decembrie 2008 14:49:45
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.97 kb
#define max(i,j) ( i > j )? (i) : (j)

#include <stdio.h>
#define N_MAX 16
#define M_MAX 16
void read();
void solve();
void write();

int M, N, board[N_MAX][M_MAX],answer, tmp[N_MAX];

int main()
{
	read();
	solve();
	write();
	return 0;
}
void read()
{
	int i,j;
	FILE * f;
	f = fopen("flip.in","r");
	fscanf(f,"%d %d",&N, &M);
	for(i = 0; i < N; ++i)
	for(j = 0; j < M; ++j)
		fscanf(f,"%d",board[i] + j);
	fclose(f);
}
	
void solve()
{
	int i,bst,k,j,sum;
	for(i = 0; i < (1 << M); ++ i){
		bst = 0;
		
		for(j = 0; j < M; ++j){
			tmp[j]= (i & (1 << j) ? 1: 0);			//?
			//printf("%d %d %d %d\n",i,j,tmp[i],1 << j);
		}
		
 		for(j = 0; j < N; ++j)
		{
			sum = 0;
			for(k = 0; k < M; ++k){
				sum += (tmp[k] ? -1 : 1) * board[j][k];
			}	
			bst += max(sum, -sum);
				
			//printf("%d\n",bst);
		}

		answer = max(answer,bst);
	}
}

void write()
{
	FILE * f;
	f = fopen("flip.out","w");
	fprintf(f,"%d",answer);
	fclose(f);
}