Cod sursa(job #1017231)

Utilizator Alina_MariaMateescu Adina Lenuta Maria Alina_Maria Data 27 octombrie 2013 15:55:25
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int n, m, M[20][20], sScenariu = 0, sMax = 0;
int posibilitate[] = { -1, 1 };
int lineP[50], colP[50];

void afisareM() {
    for(int i = 0; i < n; ++i) {
        for(int j = 0; j < m; ++j)
            printf("%d ", M[i][j]);
        printf("\n");
    }
}

void citireFis() {
    scanf("%d %d", &n, &m);
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
            scanf("%d", &M[i][j]);
    //afisareM();
}

void calcSumaScenariu() {
    sScenariu = 0;
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
            sScenariu += (M[i][j] * lineP[i] * colP[j]);
    if (sScenariu > sMax)
        sMax = sScenariu;
    //printf("%d\n", sScenariu);
}

void backC(int k) {
    if(k == m) {
        /*printf("column: \n\t");
        for (int i = 0; i < k; i++)
            printf("%d ", colP[i]);
        printf("\n");*/
        calcSumaScenariu();
    } else {
        for(int i = 0; i < 2; ++i) {
            colP[k] = posibilitate[i];
            backC(k + 1);
        }
    }
}

void backL(int k) {
    if(k == n) {
        //printf("line: \n\t");
        /*for (int i = 0; i < k; i++)
            printf("%d ", lineP[i]);
        printf("\n");*/
        backC(0);
    } else {
        for(int i = 0; i < 2; ++i) {
            lineP[k] = posibilitate[i];
            backL(k + 1);
        }
    }
}

int main() {
    freopen("flip.in", "r", stdin);
    freopen("flip.out", "w", stdout);
    citireFis();
    backL(0);
    printf("%d", sMax);
    return 0;
}