Pagini recente » Cod sursa (job #2519067) | Cod sursa (job #513161) | Cod sursa (job #901094) | Cod sursa (job #190522) | Cod sursa (job #780903)
Cod sursa(job #780903)
#include<stdio.h>
#include<limits.h>
int **matr, *sum, max = INT_MIN, m, n;
void afis(int k, int *x) {
for(int i = 0; i <= k; i++) {
for(int j = 0; j < n; j++) {
sum[j] -= matr[j][x[i]] * 2;
}
}
int s = 0;
for(int i = 0; i < n; i++)
if(sum[i] < 0) s -= sum[i];
else s += sum[i];
if(max < s) max = s;
for(int i = 0; i <= k; i++) {
for(int j = 0; j < n; j++) {
sum[j] += matr[j][x[i]] * 2;
}
}
}
int cc(int k, int m, int *x) {
if(k == 0) {
afis(k, x);
return 1;
}
else if(x[k - 1] >= x[k]) return 0;
else {
afis(k, x);
return 1;
}
}
void back(int m, int *x) {
int k = 0;
x[0] = -1;
while(k > -1) {
while(x[k] < m - 1) {
x[k]++;
if(cc(k, m, x)) if(k != m - 1) x[++k] = 0;
}
k--;
}
}
int main() {
FILE *f = fopen("flip.in", "r");
FILE *g = fopen("flip.out", "w");
int *x;
fscanf(f, "%d %d ", &n, &m);
matr = new int*[n];
sum = new int[n];
for(int i = 0; i < n; i++) {
matr[i] = new int[m];
int s = 0;
for(int j = 0; j < m; j++) {
fscanf(f, "%d", &matr[i][j]);
s += matr[i][j];
}
sum[i] = s;
}
x = new int[m];
back(m, x);
fprintf(g, "%d", max);
fclose(f);
fclose(g);
return 0;
}