Pagini recente » Cod sursa (job #1112103) | Cod sursa (job #2256722) | Cod sursa (job #2693188) | Cod sursa (job #1230815) | Cod sursa (job #2434441)
#include <fstream>
#include "Source.h"
class Flip {
private:
int **t;
int n, m;
int sum;
int maxSum;
void flipLine(int line) {
for (int j = 0; j < m; j++) {
sum -= t[line][j];
t[line][j] *= -1;
sum += t[line][j];
}
}
void flipColumn(int column) {
for (int i = 0; i < n; i++) {
sum -= t[i][column];
t[i][column] *= -1;
sum += t[i][column];
}
}
void computeMaxSum(int line, int column) {
if (line < n) {
computeMaxSum(line + 1, column);
flipLine(line);
computeMaxSum(line + 1, column);
flipLine(line);
}
else if (column < m) {
computeMaxSum(line, column + 1);
flipColumn(column);
computeMaxSum(line, column + 1);
flipColumn(column);
}
if (sum > maxSum) {
maxSum = sum;
}
}
public:
Flip(int **t, int n, int m) {
this->t = t;
this->n = n;
this->m = m;
sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
sum += t[i][j];
}
}
maxSum = sum;
}
int getMaxSum() {
computeMaxSum(0, 0);
return maxSum;
}
};
int main() {
std::ifstream fin("flip.in");
std::ofstream fout("flip.out");
int n, m;
fin >> n;
fin >> m;
int **t = new int*[n];
for (int i = 0; i < n; i++) {
t[i] = new int[m];
for (int j = 0; j < m; j++) {
fin >> t[i][j];
}
}
Flip *f = new Flip(t, n, m);
fout << f->getMaxSum();
return 0;
}