Cod sursa(job #2602921)

Utilizator CamelcamelCamel Camel Camelcamel Data 18 aprilie 2020 09:54:58
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

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

int v[16][16],v0[16][16],g[16];
int n,m,s,st,M;


long long scol(long long j){
    s=0;
    for(long long i=0;i<n;i++) s+=v[i][j];
    return s;
}
void chcol(long long j){
    if(scol(j)<0) for(long long i=0;i<n;i++) v[i][j]*=-1;
}
long long sline(long long i){
    s=0;
    for(long long j=0;j<m;j++) s+=v[i][j];
    return s;
}
void chline(long long i){
    if(sline(i)<0) for(long long j=0;j<m;j++) v[i][j]*=-1;
}
void changeline(){
    for(long long i=0;i<n;i++) for(long long j=0;j<m;j++) v[i][j]=v0[i][j]*g[i];
}
void changecol(){
    for(long long i=0;i<n;i++) for(long long j=0;j<m;j++) v[i][j]=v0[i][j]*g[j];
}
void changeg(){
    for(long long i=0;i<=min(n,m);){
        if(g[i]==1){g[i]=-1;i++;}
        else{g[i]=1;break;}
    }
}
long long stot(){
    st=0;
    for(long long i=0;i<n;i++) for(long long j=0;j<m;j++) st+=v[i][j];
    return st;
}


int main()
{
    in>>n>>m;
    for(int i=0;i<min(m,n);i++) g[i]=-1;
    for(int i=0;i<n;i++) for(int j=0;j<m;j++){in>>v0[i][j];v[i][j]=v0[i][j];}
    if(m>=n){
        for(long long i=0;i<pow(2,n);i++){
          changeline();
          for(long long j=0;j<m;j++) chcol(j);
          if(stot()>M) M=stot();
          changeg();
        }
    }

    else{
        for(long long j=0;j<pow(2,m);j++){
          changecol();
          for(long long i=0;i<n;i++) chline(i);
          if(stot()>M) M=stot();
          changeg();
        }
    }
    out<<M;
}