Cod sursa(job #1842868)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 7 ianuarie 2017 18:19:27
Problema Jocul Flip Scor 40
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 s;int n,m,a[18][18];int sc;
/*int Calcul()
{ int i,j;int suma=0;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
     if((a[i][0]==0&&a[0][j]==0)||(a[i][0]==1&&a[0][j]==1)) suma=suma+a[i][j];
     else suma=suma-a[i][j];
    return suma;
}*/
void Back(int x,int y)
{ int i,j;
  for(i=0;i<=1;i++)
  { a[x][y]=i;
    if(i==1)
     {  int ss=0;
      if(x==0)
          { for(j=1;j<=n;j++) {ss=ss+a[j][y];a[j][y]=-a[j][y];}
            sc=sc-2*ss;if(sc>s) s=sc;
               if(y==m) Back(1,0);
               else Back(0,y+1);
            sc=sc+2*ss;
           for(j=1;j<=n;j++) {a[j][y]=-a[j][y];}
          }
      else
          { for(j=1;j<=m;j++) {ss=ss+a[x][j];a[x][j]=-a[x][j];}
            sc=sc-2*ss;if(sc>s) s=sc;
              if(x!=n) Back(x+1,0);
           sc=sc+2*ss;
           for(j=1;j<=m;j++) {a[x][j]=-a[x][j];}
          }
     }
     else
      {if(x==0)
          { if(y==m) Back(1,0);
            else Back(0,y+1);
          }
      else
          { if(x!=n) Back(x+1,0); }
      }
  }

}

int main()
{ fin>>n>>m;
int i,j;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
 {fin>>a[i][j];
  sc=sc+a[i][j];
 }
  Back(0,1);
  fout<<s;
    return 0;
}