Cod sursa(job #1514382)

Utilizator tudorcomanTudor Coman tudorcoman Data 31 octombrie 2015 09:38:44
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb

#include <cstdio>
#include <algorithm>

int N, M;
int maxSum;
int mat[20][20], s[20];

inline int abs(int nr) {
	return nr > 0 ? nr : -nr;
}

inline void f(int a, int b) {
	for(register int i = 1; i <= M; ++ i)
		s[i] += b * (mat[a][i] << 1);
}

void backtracking(int step = 1) {
	if(step == N + 1) {
		int ans = 0;
		for(register int i = 1; i <= M; ++ i)
			ans += abs(s[i]);
		maxSum = std::max(ans, maxSum);
	} else {
		backtracking(step + 1);
		f(step, -1);
		backtracking(step + 1);
		f(step, +1);
	}
}

int main(void) {
	freopen("flip.in", "r", stdin);
	freopen("flip.out", "w", stdout);
	scanf("%d %d", &N, &M);
	for(register int i = 1; i <= N; ++ i)
		for(register int j = 1; j <= M; ++ j)
			scanf("%d", &mat[i][j]), 
			s[j] += mat[i][j];

	backtracking();
	printf("%d\n", maxSum);
	return 0;
}