Cod sursa(job #1245862)

Utilizator robx12lnLinca Robert robx12ln Data 20 octombrie 2014 09:53:17
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
long long a[20][20],x[20],sum[20],maxim=-2000000000,i,j,n,m,w[20],sumt;
void back(int m){
    if(x[0]==1){
        return;
    }else{
        int s=0;
        for(i=m;i>0;i--){
            if(x[i]==2){
                x[i-1]++;
                x[i]=0;
            }else{
                break;
            }
        }
        for(i=1;i<=m;i++){
            if(x[i]==1){
                for(j=1;j<=n;j++){
                    sum[i]+=(a[j][i]*-1);
                }
            }else{
                if(x[i]==0){
                    s+=sum[i];
                }
            }
        }
        if(maxim<s){
            maxim=s;
            for(i=1;i<=m;i++){
                w[i]=x[i];
            }
        }
        x[m]++;
        back(m);
    }
}
int main(){
    fin>>n>>m;
    for(j=1;j<=n;j++){
        for(i=1;i<=m;i++){
            fin>>a[j][i];
        }
    }
    for(i=1;i<=m;i++){
        for(j=1;j<=n;j++){
            sum[i]+=a[j][i];
        }
    }
    back(m);
    for(i=1;i<=m;i++){
        if(w[i]==1){
            for(j=1;j<=n;j++){
                a[j][i]*=-1;
            }
        }
    }
    for(i=1;i<=n;i++){
        sum[i]=0;
        for(j=1;j<=m;j++){
            sum[i]+=a[i][j];
        }
    }
    for(i=1;i<=n;i++){
        if(sum[i]<0){
            sum[i]*=-1;
            sumt+=sum[i];
        }else{
            sumt+=sum[i];
        }
    }
    fout<<sumt;
    return 0;
}