Pagini recente » Cod sursa (job #21456) | Cod sursa (job #2631453) | Cod sursa (job #335971) | Monitorul de evaluare | Cod sursa (job #3240350)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
const int MAX_NUM = 16;
int n, m, a[MAX_NUM][MAX_NUM];
int maxSum = INT_MIN;
int calculateSum() {
int sum = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
sum += a[i][j];
}
}
return sum;
}
void inverseRow(int row) {
for (int j = 0; j < m; ++j) {
a[row][j] *= -1;
}
}
void inverseColumn(int col) {
for (int i = 0; i < n; ++i) {
a[i][col] *= -1;
}
}
void maximizeSum(int row, int col) {
if (row == n) {
int currentSum = calculateSum();
maxSum = max(maxSum, currentSum);
return;
}
if (row < n) {
maximizeSum(row + 1, col);
inverseRow(row);
maximizeSum(row + 1, col);
inverseRow(row);
}
if (col < m) {
maximizeSum(row, col + 1);
inverseColumn(col);
maximizeSum(row, col + 1);
inverseColumn(col);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
fin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
fin >> a[i][j];
}
}
maximizeSum(0, 0);
fout << maxSum << "\n";
return 0;
}