Cod sursa(job #939986)

Utilizator TheShadowsAlexandru Cristian TheShadows Data 15 aprilie 2013 12:30:47
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<fstream>
using namespace std;
long long n, m, a[17][17], col[17], maxsum=0, nlin[17][2];
void verif(){
    int lin[17][2];
    int sum=0;
    for(int i=1; i<=n; i++){
        lin[i][0]=nlin[i][0]; lin[i][1]=nlin[i][1];
    }

    for(int j=1; j<=m; j++){
        if(col[j]==-1){
            for(int i=1; i<=n; i++){
                lin[i][0]-=a[i][j];
                lin[i][1]-=a[i][j];
            }
        }
    }
    for(int i=1; i<=n; i++)
        if(lin[i][0]+lin[i][1]>0){
            sum+=lin[i][0]+lin[i][1];
        }else{
            sum+=lin[i][0]*(-1)+lin[i][1]*(-1);
        }
    if(sum>maxsum)
        maxsum=sum;
}
void gen(int j){
    col[j]=1;
    if(j<m)
        gen(j+1);
    else{
        verif();
    }

    col[j]=-1;
    if(j<m)
        gen(j+1);
    else{
        verif();
    }
}
int main(){
    ifstream in("flip.in");
    ofstream out("flip.out");
    in>>n>>m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            in>>a[i][j];
        }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++){
            if(a[i][j]>0)
                nlin[i][0]+=a[i][j];
            else
                nlin[i][1]+=a[i][j];
        }
    gen(1);
    out<<maxsum<<"\n";
    return 0;
}