Cod sursa(job #1268760)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 21 noiembrie 2014 13:59:22
Problema Jocul Flip Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <stdio.h>
FILE *fin, *fout;
long int sum, max, sum1;
int m, n;
unsigned long int c, temp, pwr[16];
bool *v, f;
int main()
{
    fin = fopen("flip.in", "r");
    fout = fopen("flip.out", "w");
    pwr[0] = 1;
    for(int i =1; i< 16; i++) pwr[i] = pwr[i-1]*2;
    fscanf(fin, "%d%d", &m, &n);
    v = new bool[m];
    int arr1[m][n], arr2[m][n];
    for(int i= 0; i< m; i++)
    {
            for(int j =0; j< n; j++)
            {
                    fscanf(fin, "%d", &arr1[i][j]);
            }
    }
    max = -999999999;
    for(c = 0;c<pwr[m]; c++)
    {
                       for(int i = 0; i< m; i++) v[i] = 0;
                       for(int i = 0; i< m; i++)
                               for(int j= 0; j< n; j++)
                                       arr2[i][j] = arr1[i][j];
                       temp  = c;sum = 0;
                       for(int i =0; temp; i++)
                       {
                                  v[m-i] = temp%2;
                                  temp = temp/2;
                       }
                       for(int i = 0; i< m; i++)
                       {
                               if(!v[i]) continue;
                               for(int j= 0; j< n; j++)
                               {
                                       arr2[i][j]*=-1;
                               }
                       }
                       for(int i = 0; i< n; i++)
                       {
                               sum1 = 0;
                               for(int j =0; j< m; j++) sum1+=arr2[j][i];
                               if(sum1 < 0) sum-=sum1;
                               else sum+=sum1;
                       }
                       if(!f)
                       {
                             f = 1;
                             max = sum;
                             continue;
                       }
                       if(sum > max) max = sum;
    }
    fprintf(fout, "%d", max);
    fclose(fin);
    fclose(fout);
    return 0;
}