Cod sursa(job #1720406)

Utilizator otnielMercea Otniel otniel Data 22 iunie 2016 14:27:44
Problema Jocul Flip Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
int x;
long maxim;
long verif(int n,int m,int a[n][m])
{
 long sumafinal=0;
 int i;
 int j;
 for(i=0;i<m;i++)
       {
            long suma=0;
            for(j=0;j<n;j++)
            suma=suma+a[j][i];
            if(suma<0)
                {for(j=0;j<n;j++)
                a[j][i]=a[j][i]*(-1);
                suma=suma*(-1);}
            sumafinal=sumafinal+suma;

       }

return sumafinal;
}
int back(int k,int n,int m,long a[n][m])
{
    if(k<=x)
    {

        long  b[n][m];

        int j;
        int i;
        for(j=n-1;j>=0;j--)
        if(k&1<<j)
        {
            int i;
            for(i=0;i<m;i++)
                b[j][i]=a[j][i]*(-1);
        }
        else
           {
                int i;
                for(i=0;i<m;i++)
                b[j][i]=a[j][i];

           }
        for(i=0;i<n;i++)
       {for(j=0;j<m;j++)
       printf("%d ",b[i][j]);
       printf("\n");}
       printf("\n");
       long sumafinal=verif(n,m,b);
       if(sumafinal>maxim)
       maxim=sumafinal;

    back(k+1,n,m,a);
    }
    else
    {   FILE *g;
    g=fopen("flip.out","w");
    fprintf(g,"%ld",maxim);
    return 0;}

}
int main()
{   FILE *f;
    f=fopen("flip.in","r");
    int n,m;
    int i;
    int j;
    fscanf(f,"%d%d",&n,&m);
    long a[n][m];
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            fscanf(f,"%ld",&a[i][j]);
    x=(1<<n)-1;
    back(0,n,m,a);

}