Cod sursa(job #3334760)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 19 ianuarie 2026 18:38:47
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.35 kb
//https://infoarena.ro/problema/flip

//#pragma GCC optimize("O3")   
//#pragma GCC optimize("Ofast") 
//#pragma GCC optimize("fast-math") 
//#pragma GCC optimize("unroll-loops") 
//#pragma GCC optimize("inline")  
//#define _USE_MATH_DEFINES
//#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <fstream>
//#include <vector>
//#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <utility>
//#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>

using namespace std;

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

const int NRMAX = 16;

int mat[NRMAX + 1][NRMAX + 1];
bool bl[NRMAX + 1], tbc[NRMAX + 1]; // tbc hype tbc hype :) nu serios acum boolean pt linie si coloana 
int n, m, rez;

void backtracking(int i)
{
	if (i > n)
	{
		int sum = 0, sumc = 0;
		for (int jj = 1; jj <= m; ++jj)
		{
			sumc = 0;
			for (int ii = 1; ii <= n; ++ii)
			{
				sumc += mat[ii][jj];
			}
			sum += max(sumc, -sumc);
		}
		rez = max(rez, sum);
		return;
	}

	backtracking(i + 1);

	for (int j = 1; j <= m; ++j)
		mat[i][j] = -mat[i][j];

	int sum = 0, sumc = 0;
	for (int jj = 1; jj <= m; ++jj)
	{
		sumc = 0;
		for (int ii = 1; ii <= n; ++ii)
		{
			sumc += mat[ii][jj];
		}
		sum += max(sumc, -sumc);
	}
	rez = max(rez, sum);

	backtracking(i + 1);

	for (int j = 1; j <= m; ++j)
		mat[i][j] = -mat[i][j];

	//for (j = 1; j <= m; ++j)
	//{
	//	if (tbc[j] == true)
	//		continue;
	//	//cout << j << "\n";

	//	tbc[j] = true;
	//	for (i = 1; i <= n; ++i)
	//		mat[i][j] = -mat[i][j];

	//	int sum = 0;
	//	for (int ii = 1; ii <= n; ++ii)
	//		for (int jj = 1; jj <= m; ++jj)
	//			sum += mat[ii][jj];
	//	rez = max(rez, sum);

	//	backtracking();

	//	tbc[j] = false;
	//	for (i = 1; i <= n; ++i)
	//		mat[i][j] = -mat[i][j];
	//}
}

int main()
{
	//ios_base::sync_with_stdio(false);
	//cin.tie(nullptr);
	//cout.tie(nullptr);

	int i, j;

	fin >> n >> m;
	for (i = 1; i <= n; ++i)
		for (j = 1; j <= m; ++j)
			fin >> mat[i][j];

	//putem genera toate optinunile ca n si m sunt mici

	backtracking(1);

	fout << rez << " ";

	return 0;
}