Cod sursa(job #2252955)

Utilizator bojemoiRadu Mamaliga bojemoi Data 3 octombrie 2018 13:19:02
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>

using namespace std;

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


int n, m, mn;
int a[18][18], so;
int scol[18], srand[18];
bool fc[18], fr[18];
int smax;


void calculeaza(){
    int suma = so;
    for(int i = 1; i<=n; ++i){
        if(fr[i]==1){
            suma-=2*srand[i];
        }
    }
    for(int i = 1; i<=m; ++i){
        if(fc[i]==1){
            suma-=2*scol[i];
        }
    }
    for(int i = 1; i<=n; ++i){
        for(int j = 1; j<=m; ++j){
            if(fr[i]==1 && fc[j]==1){
                suma+=4*a[i][j];
            }
        }
    }
    if(suma>smax) smax = suma;
}


void flip(int k){
    for(int i = 0; i<=1; ++i){
        if(k<n) fc[k] = i;
        else    fr[k-n] = i;
        calculeaza();
        if(k<mn){
            flip(k+1);
        }

    }
}




int main()
{
    smax = so;
    fin>>n>>m;
    so = 0;
    for(int i=1; i<=n; ++i){
        for(int j = 1; j<=m; ++j){
            fin>>a[i][j];
            scol[j]+=a[i][j];
            srand[i]+=a[i][j];
            so+=a[i][j];
        }
    }
    mn = m+n;

    flip(1);

    fout<<smax;

    return 0;
}