Cod sursa(job #1730526)

Utilizator xSliveSergiu xSlive Data 17 iulie 2016 00:40:50
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <math.h>
#define NMAX 20
using namespace std;
int a[20][20],n,m,sum=0;
ifstream f("flip.in");
ofstream g("flip.out");
int main()
{
    f >> n >> m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            f>>a[i][j];
            sum+=a[i][j];
        }
    int digit;
    int maxim=sum;
    for(int i=1;i<(int)pow(2,n);i++)
        for(int j=1;j<(int)pow(2,m);j++){
            int ic=i;
            int jc=j;
            int sumrez=sum;
            for(int k=1;k<=n&&ic;k++){
                digit = ic%2;
                ic/=2;
                if(digit)
                    for(int var=1;var<=m;var++){
                        a[k][var]*=-1;
                        sumrez=sumrez+(2*a[k][var]);
                    }
            }
            for(int k=1;k<=m&&jc;k++){
                digit = jc%2;
                jc/=2;
                if(digit)
                for(int var=1;var<=n;var++){
                    a[var][k]*=-1;
                    sumrez=sumrez+(2*a[var][k]);
                }
            }
            ic=i;
            jc=j;
            for(int k=1;k<=n&&ic;k++){
                digit = ic%2;
                ic/=2;
                if(digit)
                    for(int var=1;var<=m;var++){
                        a[k][var]*=-1;
                    }
            }
            for(int k=1;k<=m&&jc;k++){
                digit = jc%2;
                jc/=2;
                if(digit)
                for(int var=1;var<=n;var++){
                    a[var][k]*=-1;
                }
            }
            maxim=max(maxim,sumrez);
        }
    g << maxim;
    f.close();
    g.close();
    return 0;
}