Pagini recente » Cod sursa (job #171348) | Cod sursa (job #3300090)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXN 16
int max_int(int a, int b) {
return (a > b) ? a : b;
}
int main() {
FILE* fin = fopen("flip.in", "r");
FILE* fout = fopen("flip.out", "w");
if (!fin || !fout) {
fprintf(stderr, "Eroare la deschiderea fisierelor.\n");
return 1;
}
int N, M;
fscanf(fin, "%d %d", &N, &M);
int matrix[MAXN][MAXN];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
fscanf(fin, "%d", &matrix[i][j]);
}
}
int max_sum = -2100000000; // o valoare foarte mica initial
// Pentru fiecare configuratie de inversari de linii (2^N)
for (int mask = 0; mask < (1 << N); mask++) {
int total_sum = 0;
// pentru fiecare coloana calculam suma dupa inversarile de linii
for (int col = 0; col < M; col++) {
int col_sum = 0;
for (int row = 0; row < N; row++) {
int val = matrix[row][col];
// daca linia 'row' este inversata in masca mask, inmultim cu -1
if ((mask & (1 << row)) != 0) {
val = -val;
}
col_sum += val;
}
// daca suma coloanei este negativa, o inversam
if (col_sum < 0) {
col_sum = -col_sum;
}
total_sum += col_sum;
}
if (total_sum > max_sum) {
max_sum = total_sum;
}
}
fprintf(fout, "%d\n", max_sum);
fclose(fin);
fclose(fout);
return 0;
}