Cod sursa(job #1457226)

Utilizator gabi.cristacheGabi Cristache gabi.cristache Data 2 iulie 2015 23:01:23
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>

#define MaxN 20

using namespace std;

int max (int a, int b) {
	return a > b ? a : b;
}

long long max (long long a, long long b) {
	return a > b ? a : b;
}

ifstream fin("flip.in");
ofstream fout("flip.out");

int N, M;
int T[MaxN][MaxN];
long long colSum[MaxN], rowSum[MaxN];
long long tSum, result;

int main() {
	fin >> N >> M;
	for (int i = 0; i < N; ++i)
		for (int j = 0; j < M; ++j)
			fin >> T[i][j];

	for (int i = 0; i < N; ++i)
		for (int j = 0; j < M; ++j) {
			tSum += T[i][j];
			rowSum[i] += T[i][j];
			colSum[j] += T[i][j];
		}

	for (int rowsBits = 0; rowsBits < (1 << N); ++rowsBits) {
		long long sum = tSum;
		for (int i = 0; i < N; ++i)
			if (((1 << i) & rowsBits) > 0)
				sum -= 2 * rowSum[i];
		
		for (int j = 0; j < M; ++j) {
			long long newSum = sum - 2 * colSum[j];
			for (int i = 0; i < N; ++i)
				if (((1 << i) & rowsBits) > 0)
					newSum += 3 * T[i][j];

			sum = max(sum, newSum);
		}
		result = max(result, sum);
	}
	fout << result << '\n';

	return 0;
}