Cod sursa(job #1457870)

Utilizator alexxxx_iulianalex iulian alexxxx_iulian Data 4 iulie 2015 18:02:14
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

void flip(int **a,int m,int k)
{
	for(int i=0;i<m;i++)
		a[k][i]=a[k][i]*(-1);
}
void flipcol(int **a,int n,int k)
{
	for(int i=0;i<n;i++)
		a[i][k]=a[i][k]*(-1);
}
int suma(int **a, int n,int m)
{
	int s=0;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			s+=a[i][j];
	return s;
}

void back(int **a,int n,int m,int k,int &sum)
{
	if(k==m) return;
	flipcol(a,n,k);
	int aux=suma(a,n,m);
	if(aux>sum)
		sum=aux;
	flipcol(a,n,k);
	for(int i=0;i<n;i++)
	{
		flip(a,m,i);
		back(a,n,m,k+1,sum);
		flip(a,m,i);
	}
}


int main()
{
	FILE *f=fopen("flip.in","r"),*fout=fopen("flip.out","w");
	int n,m,**a,sum=0;
	fscanf(f,"%d",&n);
	fscanf(f,"%d",&m);
	a=(int **)malloc(n*sizeof(int *));
	for(int i=0;i<n;i++)
	{
		*(a+i)=(int *)malloc(m*sizeof(int));
		for(int j=0;j<m;j++)
		{
			fscanf(f,"%d",&a[i][j]);
			sum+=a[i][j];
		}
	}
	back(a,n,m,0,sum);
	fprintf(fout,"%d",sum);
	fclose(f);
	fclose(fout);
	return 0;
}