Pagini recente » 13 | Cod sursa (job #1761841) | Cod sursa (job #3226314) | Cod sursa (job #1783664) | Cod sursa (job #462857)
Cod sursa(job #462857)
#include <stdio.h>
#define col(x) scol[x][0]
#define colf(x) scol[x][1]
#define lin(x) slin[x][0]
#define linf(x) slin[x][1]
#define flip_lin(x) for(gi=0; gi<m; gi++) {a[x][gi] = -a[x][gi];}
#define flip_col(x) for(gi=0; gi<n; gi++) {a[gi][x] = -a[gi][x];}
#define SIZE 16
int a[SIZE][SIZE], f[SIZE + 1];
int n, m, gi, s;
void suma() {
int i, j, suma = 0;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
suma += f[i]*a[i][j];
if(suma > s)
s = suma;
}
void back(int lin) {
if(lin == n)
suma();
else {
f[lin] = 0;
back(lin+1);
f[lin] = 1;
back(lin+1);
}
}
void rezolva() {
int i, j;
for(i=0; i<n; i++) {
lin(i) = linf(i) = 0;
for(j=0; j<m; j++) {
lin(i) += a[i][j];
linf(i) -= a[i][j];
}
}
for(i=0; i<n; i++) {
if(linf(i) > lin(i))
flip_lin(i);
}
for(j=0; j<m; j++) {
col(j) = colf(j) = 0;
for(i=0; i<n; i++) {
col(j) += a[i][j];
colf(j) -= a[i][j];
}
}
for(j=0; j<m; j++)
if(colf(j) > col(j))
flip_col(j);
for(i=0; i<n; i++)
for(j=0; j<m; j++)
s+=a[i][j];
}
int main(int argc, char **argv) {
int i, j;
FILE *f = fopen("flip.in", "r");
if(f == NULL) { fclose(f); printf("eroare la citire!\n"); return -1; };
fscanf(f, "%d", &n);
fscanf(f, "%d", &m);
for(i=0; i<n; i++)
for(j=0; j<m; j++)
fscanf(f, "%d", &a[i][j]);
fclose(f);
back(0);
f = fopen("flip.out", "w");
fprintf(f, "%d\n", s);
fclose(f);
return 0;
}