Pagini recente » Cod sursa (job #3157294) | Cod sursa (job #1022725) | Cod sursa (job #750702) | Cod sursa (job #2296763) | Cod sursa (job #612866)
Cod sursa(job #612866)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 16
#define MMAX 16
int N, M;
int table[NMAX][MMAX];
int death_row[MMAX];
int max_sum = -1;
void init_death_row()
{
int i;
for (i = 0; i < M; i++)
death_row[i] = 1;
}
void read_data()
{
int i, j;
FILE *f = fopen("flip.in", "r");
if (!f) {
perror("fopen in:");
exit(-1);
}
fscanf(f, "%d %d", &M, &N);
for(i = 0; i < N; i++)
for(j = 0; j < M; j++)
fscanf(f, "%d", &table[i][j]);
}
void write_data()
{
FILE *f = fopen("flip.out", "w");
if (!f) {
perror("fopen out:");
exit(-1);
}
fprintf(f, "%d", max_sum);
}
int do_sum() {
int i, j, sum = 0, tsum = 0;
for (i = 0; i < N; i++) {
tsum = 0;
for (j = 0; j < M; j++) {
/* flip negative row sums */
tsum += table[i][j] * death_row[j];
if (tsum < 0)
tsum = -tsum;
}
sum += tsum;
}
if (sum > max_sum)
max_sum = sum;
}
void Solve(int i) {
if (i == M)
return;
death_row[i] = 1;
do_sum();
Solve(i+1);
death_row[i] = -1;
do_sum();
Solve(i+1);
}
int main(void) {
read_data();
init_death_row();
Solve(0);
write_data();
return 0;
}