Cod sursa(job #2760902)

Utilizator PloscaruPloscaru Marian Ploscaru Data 29 iunie 2021 14:59:16
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>

using namespace std;
int mat[20][20], v[25];
int sumcol[25], sumcolinv[25];
int main()
{
	ifstream fin("flip.in");
	ofstream fout("flip.out");
	int n, m, i, j, l, c, max1 = 0, put2 = 1;
	fin >> n >> m;
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= m; j++)
		{
			fin >> mat[i][j];
		}
	}
	for (i = 1; i <= n; i++)
	{
		put2 *= 2;
	}
	put2--; int pas, poz, ci, sum;
	for (i = 0; i <= put2; i++)
	{
		pas = 1; poz = 1; ci = i; sum = 0;
		for (j = 0; j <= 20; j++)
		{
			v[j] = sumcol[j] = sumcolinv[j] = 0;
		}
		while (ci > 0)
		{
			if (ci & 1)
			{
				v[pas] = 1;
				poz++;
			}
			pas++;
			ci /= 2;
		}
		for (l = 1; l <= n; l++)
		{
			if (v[l] == 1)
			{
				for (c = 1; c <= m; c++)
				{
					sum += -1 * mat[l][c];
					sumcol[c] += -1 * mat[l][c];
					sumcolinv[c] += mat[l][c];
				}
			}
			else
			{
				for (c = 1; c <= m; c++)
				{
					sum += mat[l][c];
					sumcol[c] += mat[l][c];
					sumcolinv[c] += -1 * mat[l][c];
				}
			}
		}
		for (j = 1; j <= m; j++)
		{
			if (sum - sumcol[j] + sumcolinv[j] > sum)
			{
				sum -= sumcol[j];
				sum += sumcolinv[j];
			}
		}
		if (sum > max1)
		{
			max1 = sum;
		}
	}
	fout << max1 << '\n';
	return 0;
}