Cod sursa(job #2196153)

Utilizator alex.sirbuSirbu Alexandru alex.sirbu Data 18 aprilie 2018 17:26:50
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream fin("flip.in");
ofstream fout("flip.out");

int v[17][17];
int n, m;

void read() {
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) {
            fin >> v[i][j];
            v[i][0] += v[i][j];
            //v[0][j] += v[i][j];
            v[0][0] += v[i][j];
        }
}

void flipLine(int line) {
    for (int i = 1; i <= n; i++) {
        v[line][i] *= -1;
        v[0][i] += 2 * v[line][i];
    }
    v[line][0] *= -1;
    v[0][0] += 2 * v[line][0];
}

void flipColumn(int column) {
    for (int i = 1; i <= m; i++) {
        v[i][column] *= -1;
        v[i][0] += 2 * v[i][column];
    }
    v[0][column] *= -1;
    v[0][0] += 2 * v[0][column];
}

int maxim;

void sumMax(){
    int s=0;
    for(int i=1; i<=n; i++){
        int sl=0;
        for(int j=1; j<=m; j++)
            sl+=v[i][j]*v[0][j];
        s+=abs(sl);
    }
    if(s>maxim) maxim=s;
}

void getSumMax(int k){
    if(k==m+1) sumMax();
    else for(int i=-1; i<=1; i+=2){
        v[0][k]=i;
        getSumMax(k+1);
    }
}

int main()
{
    read();
    getSumMax(1);
    fout<<maxim;
}