Cod sursa(job #1013290)

Utilizator Mihai96Saru Mihai Mihai96 Data 20 octombrie 2013 19:11:41
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>

using namespace std;

struct Tabla{
    int n;
    int m;
    int a[16][16];
};

int l[16];
int c[16];
int sumaMaxima;

void readData(Tabla &tabla){
    ifstream fin("flip.in");
    fin>>tabla.n>>tabla.m;
    for(int i = 0;i < tabla.n;i++){
        for(int j = 0;j < tabla.m;j++){
            fin>>tabla.a[i][j];
        }
    }

    fin.close();
}

//coloane
void prelSolColoane(Tabla &tabla){
    int suma = 0;
    int semn;
    for(int i = 0;i < tabla.n;i++){
        for(int j = 0;j < tabla.m;j++){
            semn = l[i] * c[j];
            suma += tabla.a[i][j] * semn;
        }
    }
    if(suma > sumaMaxima){
        sumaMaxima = suma;
    }
}

void backColoane(int k, int &n, Tabla &tabla){
    if(k == n){
        prelSolColoane(tabla);
    }else{
        for(int i = -1;i <= 1;i+=2){
            c[k] = i;
            backColoane(k+1, n, tabla);
        }
    }
}

//linii
void prelSolLinii(Tabla &tabla){
    backColoane(0, tabla.m, tabla);
}

void backLinii(int k, int &n, Tabla &tabla){
    if(k == n){
        prelSolLinii(tabla);
    }else{
        for(int i = -1;i <= 1;i+=2){
            l[k] = i;
            backLinii(k+1, n, tabla);
        }
    }
}

int main(){
    Tabla tabla;
    readData(tabla);

    backLinii(0, tabla.n, tabla);
    ofstream fout("flip.out");
    fout<<sumaMaxima;
    fout.close();

    return 0;
}