Cod sursa(job #2461725)

Utilizator DanDumitrescudarkeagle DanDumitrescu Data 26 septembrie 2019 03:51:33
Problema Jocul Flip Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
  #include<iostream>
 #include<cstdio>
 FILE * f=fopen("flip.in","r");
 FILE * g=fopen("flip.out","w");
using namespace std;
int n,nr=-1,m;
int st[22],st1[22],a[20][20],b[20][20],c[20][20];
int t[3];
 void citire( )
 { int i,j;
     fscanf(f,"%d %d",&n,&m);
     for(i=1;i<=n;i++)
     {
         for(j=1;j<=m;j++)
         {
             fscanf(f,"%d",&a[i][j]);
         }
     }
 }
int suma(int y[20][20])
{
    int i,j,s=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            s=s+y[i][j];
        }
    }
    return s;
}
void coloana(int j,int y[20][20])
{
    int i;
    for(i=1;i<=n;i++)
        y[i][j]=y[i][j]*(-1);

}
void linie(int j,int y[20][20])
{
    int i;
    for(i=1;i<=m;i++)
        y[j][i]=y[j][i]*(-1);

}
int nrmax;
void back2( );
void back1( )
{int r1,r2;
	int i;

	if(st[0])
		 {for(r1=1;r1<=n;r1++)
{
    for(r2=1;r2<=m;r2++)
    {
        b[r1][r2]=a[r1][r2];
    }
}

		     for(i=1;i<=st[0];i++)
             {
                 linie(st[i],b);
             }
             back2( );
		 }
	for(i=st[st[0]]+1;i<=n;i++)
	{
		st[++st[0]]=i;
		back1();
		st[st[0]]=0;
		st[0]--;
	}
}
void back2( )
{
	int i,r1,r2;

	if(st1[0])
    {  for(r1=1;r1<=n;r1++)
{
    for(r2=1;r2<=m;r2++)
    {
        c[r1][r2]=b[r1][r2];
    }
}
          for(i=1;i<=st1[0];i++)
             {
                 coloana(st1[i],c);
             }
             if(nrmax<suma(c))
                nrmax=suma(c);

    }
	for(i=st1[st1[0]]+1;i<=m;i++)
	{
		st1[++st1[0]]=i;
		back2();
		st1[st1[0]]=0;
		st1[0]--;
	}
}

int main()
{citire( );
back1( );
fprintf(g,"%d",nrmax);

	return 0;
}