Cod sursa(job #1720409)

Utilizator otnielMercea Otniel otniel Data 22 iunie 2016 14:31:42
Problema Jocul Flip Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<stdio.h>
int x;
int maxim;
int verif(int n,int m,int a[n][m])
{
 int sumafinal=0;
 int i;
 int j;
 for(i=0;i<m;i++)
       {
            int 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,int a[n][m])
{
    if(k<=x)
    {

        int  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];

           }

       int 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,"%d",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);
    int a[n][m];
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            fscanf(f,"%d",&a[i][j]);
    x=(1<<n)-1;
    back(0,n,m,a);

}