Cod sursa(job #1871494)

Utilizator loghin.alexandruLoghin Alexandru loghin.alexandru Data 7 februarie 2017 14:13:36
Problema Jocul Flip Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb

#include <fstream>
#include <vector>

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

std::vector<std::vector<int>> table;
std::vector<int> line;

#define MAX 17

int combinari[MAX] = {};

long long outputsum;

int n, m;
int linesum;
int linesumNegative;
int columnsum;
int i, j;
bool switched;

void sumMatrix(std::vector<std::vector<int>> table, int lenLine, int lenCol)
{
	long long sum = 0;
	for (auto i = 0; i < lenCol; i++)
	{
		columnsum = 0;
		linesumNegative = 0;
		for (auto j = 0; j < lenLine; j++)
		{
			if (switched)
			{
				if (combinari[j] == 1)
				{
					columnsum -= table[i][j];
				}
				else  columnsum += table[i][j];

			}
			else
			{
				if (combinari[j] == 1)
				{
					columnsum -= table[j][i];
				}
				else  columnsum += table[j][i];
			}


		}
		if (columnsum < 0)
		{
			sum -= columnsum;
		}
		else sum += columnsum;
	}
	if (sum>outputsum)
	{
		outputsum = sum;
	}
}

void genComb(int k)
{
	for (auto i = 0; i <= 1; i++)
	{
		combinari[k] = i;
		if (k == n - 1)
		{
			if (switched)
			{
				sumMatrix(table, n, m);
			}
			else sumMatrix(table, n, m);
		}
		else
		{
			genComb(k + 1);
		}
	}
}



int main(void)
{
	long long sum = 0;
	fin >> n >> m;
	for (auto i = 0; i < n; i++)
	{
		line.clear();
		for (auto j = 0; j < m; j++)
		{
			int x;
			fin >> x;
			line.push_back(x);
			sum += x;
		}
		table.push_back(line);
	}
	outputsum = sum;
	if (n>m)
	{
		m ^= n;
		n ^= m;
		m ^= n;
		switched = true;
	}
	genComb(0);

	fout << outputsum;

}