Pagini recente » Cod sursa (job #2640540) | Cod sursa (job #442687) | Istoria paginii runda/cls11_round1/clasament | Cod sursa (job #2581243) | Cod sursa (job #2199008)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n,m,it;
int sum,maxsum;
bool usedlin[40],usedcol[40],used[40];
int flip[40],matrix[40][40];
void bkt(int poz) {
if(poz == it + 1) {
sum = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
int initial = matrix[i][j];
if(usedlin[i]) {
initial = -initial;
}
if(usedcol[j]) {
initial = -initial;
}
sum += initial;
}
}
maxsum = max(sum,maxsum);
return;
} else {
for(int i = flip[poz - 1]; i <= n + m; i++) {
if(!used[i]) {
flip[poz] = i;
used[i] = true;
if(i <= n) {
usedlin[i] = true;
} else {
usedcol[i - n] = true;
}
bkt(poz + 1);
used[i] = false;
if(i <= n) {
usedlin[i] = false;
} else {
usedcol[i - n] = false;
}
}
}
}
}
int main() {
fin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
fin >> matrix[i][j];
maxsum += matrix[i][j];
sum += matrix[i][j];
}
}
flip[0] = 1;
for(it = 1; it <= n + m; it++) {
bkt(1);
}
fout << maxsum;
}