Cod sursa(job #1720431)

Utilizator otnielMercea Otniel otniel Data 22 iunie 2016 15:23:53
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
int x;
long maxim;
long verif(int n,int m,long a[20][20])// aici fac suma de pe coloana
{
 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)
                suma=suma*(-1);
            sumafinal=sumafinal+suma;

       }

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



        int j;
        int i;
        for(j=n-1;j>=0;j--)
        if(k&1<<j)//inmultesc liniile corespunzatoare submultimii
        {
            int i;
            for(i=0;i<m;i++)
                a[j][i]=a[j][i]*(-1);
        }


       long sumafinal=verif(n,m,a);
       for(j=n-1;j>=0;j--)
        if(k&1<<j)
        {
            int i;
            for(i=0;i<m;i++)
                a[j][i]=a[j][i]*(-1);
        }
       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[20][20];
    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);

}