Cod sursa(job #1842617)

Utilizator Garen456Paun Tudor Garen456 Data 7 ianuarie 2017 12:45:40
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>

using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int a[17][17],sl[17],sc[17],S,smax,op;
short int n,m;
void Citire()
{ int i,j;
   fin>>n>>m;
    for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
          {fin>>a[i][j]; sl[i]+=a[i][j]; sc[j]+=a[i][j]; S+=a[i][j];}

}

void Back()
{ int i,j;
    for(i=1;i<=n && op==0;i++)
     if(S<S+2*(-sl[i]))
     { S=S+2*(-sl[i]);
         sl[i]=-sl[i];
          for(j=1;j<=m;j++)
         { sc[j]=sc[j]+2*(-a[i][j]);
             a[i][j]=-a[i][j];
         }
         if(smax<S) smax=S;
         Back();
           for(j=1;j<=m;j++)
           { sc[j]=sc[j]+2*(-a[i][j]);
               a[i][j]=-a[i][j];
           }
           S=S-2*sl[i];
            sl[i]=-sl[i];
     }
     for(j=1;j<=m && op==0 ;j++)
            if(S<S+2*(-sc[j]))
     { S=S+2*(-sc[j]);
         sc[j]=-sc[j];
         for(i=1;i<=n;i++)
         { sl[i]=sl[i]+2*(-a[i][j]);
             a[i][j]=-a[i][j];
         }
         if(smax<S) smax=S;
         Back();
         for(i=1;i<=n;i++)
         { sl[i]=sl[i]+2*(-a[i][j]);
             a[i][j]=-a[i][j];
         }
         S=S-2*sc[j];
         sc[j]=-sc[j];
     }
     op=1;


}

int main()
{
    Citire();
    Back();
    fout<<smax;
    return 0;
}