Cod sursa(job #1477193)

Utilizator mike93Indricean Mihai mike93 Data 25 august 2015 18:20:48
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#define NMAX 16
#define MMAX 16

void increment(int tab[MMAX+1]) {
	int i;
	tab[0]++;
	for(i=0; i<MMAX; i++) {
		tab[i+1] = tab[i+1] + tab[i]/2;
		tab[i] = tab[i]%2;
	}
}

int flip(int t[NMAX][MMAX], int N, int M) {
	int tab[MMAX+1];
	int i, j;
	for(j=0; j<M+1; j++) {
		tab[j] = 0;
	}
	int a[NMAX];
	int res = 0;
	while(tab[M]==0) {
		int test[NMAX][MMAX];
		for(i=0; i<N; i++) {
			for(j=0; j<M; j++) {
				if(tab[j]==0) {
					test[i][j] = t[i][j];
				} else {
					test[i][j] = -t[i][j];
				}
			}
		}
		
		for(i=0;i<N;i++) {
			a[i]=0;
			for(j=0;j<M;j++) {
				a[i] = a[i] + test[i][j];
			}
		}
		int val = 0;
		for(i=0;i<N;i++) {
			if(a[i]<0) {
				val = val - a[i];
			} else {
				val = val + a[i];
			}
		}

		if(val > res) {
			res = val;
		}
		increment(tab);
	}
	return res;
}

int main() {
	FILE* fin = fopen("flip.in", "r");
	int t[NMAX][MMAX];
	int N, M;
	fscanf(fin, "%d %d\n", &N, &M);
	int i, j;
	for(i=0; i<N; i++) {
		for(j=0; j<M; j++) {
			fscanf(fin, "%d", &t[i][j]);
		}
		fscanf(fin, "\n");
	}
	fclose(fin);
	
	int res = flip(t, N, M);
	
	FILE* fout = fopen("flip.out", "w");
	fprintf(fout, "%d\n", res);
	fclose(fout);
	return 0;
}