Pagini recente » Cod sursa (job #1615079) | Cod sursa (job #3318153) | Cod sursa (job #3347302) | Cod sursa (job #2296015) | Cod sursa (job #3334758)
//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, j;
for (i = 1; i <= n; ++i)
{
if (bl[i] == true)
continue;
//cout << i << "\n";
bl[i] = true;
for (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();
bl[i] = false;
for (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();
fout << rez << " ";
return 0;
}