Cod sursa(job #2126762)

Utilizator Claudiu_SimaClaudiu Sima Claudiu_Sima Data 9 februarie 2018 22:31:00
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int n,m,a[20][20],x1[16],x2[16],s,smax;
void citire(){
    f>>n>>m;x1[0]=1;x2[0]=2;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            f>>a[i][j];s+=a[i][j];
        }
    smax=s;
    f.close();
}
void prelSol(int z,int x[]){
    for(int i=1;i<=z;i++)
        if(x[i]==1){
            if(z==n)
                for(int j=1;j<=m;j++)
                    s-=(2*a[i][j]);
            else
                for(int j=1;j<=n;j++)
                    s-=(2*a[j][i]);

        }
    if(s>smax)
        smax=s;
}
void Back(int z,int x[]){
    int k;
    for(k=1;k<=z;k++)
        x[k]=-1;
    k=1;
    while(k>0){
        if(k==z+1){
            prelSol(z,x);
            if(z!=m)Back(m,x2);
             for(int i=1;i<=z;i++)
                if(x[i]==1){
                    if(z==n)
                        for(int j=1;j<=m;j++)
                            s+=(2*a[i][j]);
                    else
                        for(int j=1;j<=n;j++)
                            s+=(2*a[j][i]);

                }
            k--;
        }
        else
            if(x[k]<=0){
                x[k]++;
                k++;
            }
            else{

                x[k]=-1;
                k--;
            }
    }
}
int main(){
    citire();
    Back(n,x1);
    g<<smax;
    g.close();
    return 0;
}