Pagini recente » Cod sursa (job #848260) | Cod sursa (job #1491697) | Cod sursa (job #1579747) | Cod sursa (job #2442455) | Cod sursa (job #2535867)
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n, m, a[17][17], v[33], p, s, i, j, k, maxim;
int sum() {
int s = 0;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
s += a[i][j];
return s;
}
int flipl(int x) {
for(int i = 1; i <= m; ++i)
a[x][i] *= -1;
}
int flipc(int x) {
x -= n;
for(int i = 1; i <= n; ++i)
a[i][x] *= -1;
}
int abs(int n) {
if(n < 0)
return -n;
return n;
}
void dtb(int x) {
int i = n+m;
while(x) {
v[i] = x % 2;
x /= 2;
--i;
}
}
int main() {
fin >> n >> m;
p = pow(2, n+m);
for(i = 1; i <= n; ++i)
for(j = 1; j <= m; ++j)
fin >> a[i][j];
for(i = 0; i < p; ++i) {
s = 0;
dtb(i);
for(j = 1; j <= n; ++j)
if(v[j])
flipl(j);
for(j; j <= n+m; ++j)
if(v[j])
flipc(j);
if(abs(sum()) > maxim)
maxim = abs(sum());
for(j = 1; j <= n; ++j)
if(v[j])
flipl(j);
for(j; j <= n+m; ++j)
if(v[j])
flipc(j);
}
fout << maxim;
}