Cod sursa(job #2857339)

Utilizator alexandru.ciorneiAlexandru-Stefan Ciornei alexandru.ciornei Data 25 februarie 2022 13:56:49
Problema Jocul Flip Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
#include <stdlib.h>

void calc(int n, int m, int *s, int **mat, int *max_sum) {
    int total = 0;
    for (int i = 0; i < n; ++i) {
        int lin = 0;
        for (int j = 0; j < m; ++j)
            lin += s[j] * mat[i][j]; 
        if (lin < 0)
            total -= lin;
        else
            total += lin;
    }
    if (total > *max_sum)
        *max_sum = total;
}
 
void back(int k, int n, int m, int *s, int **mat, int *max_sum) {
    if (k == m)
        calc(n, m, s, mat, max_sum);
    else {
        s[k] = -1;
        back(k + 1, n, m, s, mat, max_sum);
        s[k] = 1;
        back(k + 1, n, m, s, mat, max_sum);
    }
}

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

    // citire n, m si alocare dinamica matrice
    int n, m;
    fscanf(in, "%d%d", &n, &m);
    int **mat = (int **) calloc(n, sizeof(int *));
    for (int i = 0; i < n; i++)
        mat[i] = (int *) calloc(m, sizeof(int));

    // citire matrice
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            fscanf(in, "%d", &mat[i][j]);

    int *s = (int *) calloc(m, sizeof(int));
    int max_sum = 0;
    back(0, n, m, s, mat, &max_sum);
    fprintf(out, "%d", max_sum);

    // dezalocare memorie matrice
    for (int i = 0; i < n; i++)
        free(mat[i]);
    free(mat);
    free(s);

    fclose(in);
    fclose(out);
    return 0;
}