Cod sursa(job #2212423)

Utilizator viorel.mocanuMocanu Viorel Gabriel viorel.mocanu Data 14 iunie 2018 01:11:50
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#include <stdlib.h>

int max (int a, int b)
{
  if (a > b)
    return a;
  else
    return b;
}

void calcul(int *maxim,int n, int m,int *s,int **a)
{
  int i,j;
  int suma = 0;
  for (j = 1; j <= m; j++)
 {
     int sumc = 0;
     for (i = 1; i <= n; i++)
         sumc += a[i][j] * s[i];
     sumc = abs(sumc);
     suma += sumc;
     *maxim = max(*maxim, suma);

 }
}

void BackTracking(int position,int n,int m,int *maxim,int *s,int **a)
{
  if(position == n+1)
    calcul(maxim,n,m,s,a);
  else
  {
    s[position] = 1;
    BackTracking(position + 1,n,m,maxim,s,a);
    s[position] = -1;
    BackTracking(position + 1,n,m,maxim,s,a);
  }
}

int main()
{
  int **a;
  int n,m;
  int i,j;
  FILE *f;
  f = fopen("flip.in","r");
  fscanf(f,"%d%d\n",&n,&m);
  a = (int **)malloc((n+1)*sizeof(int *));
  for(i=1;i<=n;i++)
    a[i] = (int *)malloc((m+1)*sizeof(int));

  for(i=1;i<=n;i++)
  {
    for(j=1;j<=m;j++)
    {
      fscanf(f,"%d",&a[i][j]);
    }
  }
  int *maxim = (int *)calloc(1,sizeof(int));
  int *s = (int *)calloc(2000,sizeof(int));
  BackTracking(1,n,m,maxim,s,a);
  fclose(f);
  f=fopen("flip.out","w");
  fprintf(f,"%d\n",*maxim);
  return 0;

}