Cod sursa(job #1732606)

Utilizator bmihaiBaba Sebastian Mihai bmihai Data 22 iulie 2016 00:25:14
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#include <stdlib.h>

int N, M;
int grid[16][16];
int temp_grid[16][16];

void read_data(FILE *f)
{
    fscanf(f, "%d %d", &N, &M);
    
    int i, j;
    for (i = 0; i < N; ++i)
        for (j = 0; j < M; ++j)
            fscanf(f, "%d", &grid[i][j]);
}

int calc_max_sum()
{
    int counter = 0;
    int max_iter = 1 << N;
    int max_sum = 0;
    
    while (counter < max_iter)
    {
        int i, j;
        int cur_sum = 0;
        
        for (i = 0; i < N; ++i)
        {
            if ((counter >> i) & 1)
                for (j = 0; j < M; ++j)
                    temp_grid[i][j] = -grid[i][j];
            else
                for (j = 0; j < M; ++j)
                    temp_grid[i][j] = grid[i][j];
        }
        
        for (j = 0; j < M; ++j)
        {
            int col_sum = 0;
            
            for (i = 0; i < N; ++i)
                col_sum += temp_grid[i][j];
            
            cur_sum += abs(col_sum);
        }
            
        if (cur_sum > max_sum)
            max_sum = cur_sum;
        
        ++counter;
    }
    
    return max_sum;
}

int main()
{
    FILE *in = fopen("flip.in", "r");
    FILE *out = fopen("flip.out", "w");

    read_data(in);
    
    fprintf(out, "%d", calc_max_sum());
    
    fclose(in);
    fclose(out);
    
    return 0;
}