Pagini recente » Cod sursa (job #799355) | Cod sursa (job #2283597) | Cod sursa (job #1606212) | Cod sursa (job #1065520) | Cod sursa (job #3128704)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
const int MAX_N = 20;
int n, m;
int board[MAX_N][MAX_N];
bool flipX[MAX_N];
bool flipY[MAX_N];
int maxSum;
void HandleInput() {
fin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
fin >> board[i][j];
}
}
}
void ComputeSum() {
int sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int x = board[i][j];
if (flipX[i]) {
x = -x;
}
if (flipY[j]) {
x = -x;
}
sum += x;
}
}
if (sum > maxSum) {
maxSum = sum;
}
}
void Backtracking(int idxX, int idxY) {
ComputeSum();
for (int i = idxX; i < n; i++) {
for (int j = idxY; j < m; j++) {
Backtracking(i + 1, j + 1);
flipX[i] = true;
Backtracking(i + 1, j + 1);
flipX[i] = false;
flipY[j] = true;
Backtracking(i + 1, j + 1);
flipY[j] = false;
flipX[i] = true;
flipY[j] = true;
Backtracking(i + 1, j + 1);
flipX[i] = false;
flipY[j] = false;
}
}
}
void HandleOutput() {
fout << maxSum << '\n';
}
int main() {
HandleInput();
Backtracking(0, 0);
HandleOutput();
return 0;
}