Cod sursa(job #1543271)

Utilizator emyll96Constantinescu Emil emyll96 Data 6 decembrie 2015 10:00:48
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
FILE *A,*B;
int x[17],k=1, n,m,mac[45][45],S,sopt,snorm,max;
int aleg(int k)
{
	if(x[k]>=1)return 0;
	else x[k]++;
	return 1;
}
int ver(int k)
{
	return 1;
}
int init(int k)
{
	x[k]=-1;
}
void sol()
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(x[i]==1)S+=-mac[i][j];
			else S+=mac[i][j];
		}
	}
	for(j=1;j<=m;j++)
	{
		sopt=snorm=0;
		for(i=1;i<=n;i++)
		{
			if(x[i]==1)
			{
				sopt+=mac[i][j];
			}
			else
			{
				sopt+=-1*mac[i][j];
			}
		}
		if(S+sopt+sopt>S)S=S+sopt+sopt;
	}
	if(S>max)max=S;
	sopt=0;snorm=0;S=0;
}

void bak(int k)
{
	if(k==n+1)sol();
	else
	{
		init(k);
		while(aleg(k))
		{
			if(ver(k))bak(k+1);
		}
	}
}
int main()
{
	int i,j;
	A=fopen("flip.in","r");
	B=fopen("flip.out","w");
	fscanf(A,"%d",&n);
	fscanf(A,"%d",&m);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)fscanf(A,"%d",&mac[i][j]);
	}
	bak(1);
	fprintf(B,"%d",max);
	fclose(A);
	fclose(B);
}