Cod sursa(job #1660797)

Utilizator experiment322Alexandru-Damian Manea experiment322 Data 23 martie 2016 14:00:05
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

enum {
	NMAX = 16,
	MMAX = 16
};

static int N, M, SMAX;
static int TABLE[NMAX][MMAX];

static int FillBits(int n)
{
	int i, x = 0;
	for (i = 0; i < n; ++i) {
		x += 1 << i;
	}
	return x;
}

static void CalcSum(int p1, int p2)
{
	int i, j, k, sum = 0;
	for (i = 0; i < N; ++i) {
		for (j = 0; j < M; ++j) {
			k = (p1 >> i & 1) && (p2 >> j & 1);
			if (k) {
				sum += -TABLE[i][j];
			} else {
				sum += TABLE[i][j];
			}
		}
	}
	SMAX = SMAX < sum ? sum : SMAX;
}

int main(void)
{
	int i, j, p1max, p2max;
	freopen("flip.in", "r", stdin);
	freopen("flip.out", "w", stdout);
	SMAX = 1 << 31;
	scanf("%i%i", &N, &M);
	for (i = 0; i < N; ++i) {
		for (j = 0; j < M; ++j) {
			scanf("%i", &TABLE[i][j]);
		}
	}
	p1max = FillBits(N);
	p2max = FillBits(M);
	for (i = 0; i <= p1max; ++i) {
		for (j = 0; j <= p2max; ++j) {
			CalcSum(i, j);
		}
	}
	printf("%i\n", SMAX);
	return 0;
}