Cod sursa(job #1508793)

Utilizator George-AndreiGeorge Andrei George-Andrei Data 22 octombrie 2015 23:10:27
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
int m, n;
long int v[20][20], copie[20][20], MAX;



int suma() {
	int s = 0, x, y;
	for (x = 0; x < n; x++)
		for (y = 0; y < m; y++) { 
			if (copie[x][y] == 1) s += -1 * v[x][y];
			else s += v[x][y];
		}
	return s;
}

void flip(int z) {
	int i, j, k, l;
		for (i = 0; i < n; i++) {
			k = (z >> m + i) % 2;
			for (j = 0; j < m; j++) {
				l = (z >> m - j - 1) % 2;
				copie[i][j] = k ^ l;
			}
		};

}

void maxim() {
	int x;
	x = suma();
	if (x > MAX) MAX = x;
}

void preflip() {
	int x, i, j, a = 1;
	a = a << m + n - 1;
	--a;
	while (a >= 0) {
		flip(a);
		maxim();
		--a;
	}
}



int main() {
	freopen("flip.in", "r", stdin);
	freopen("flip.out", "w", stdout);
	scanf("%d", &n);
	scanf("%d", &m);
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			scanf("%d", &v[i][j]);
		}
	};
	preflip();
	printf("%d", MAX);
	return 0;
}