Cod sursa(job #546034)

Utilizator olteanu1994Olteanu Ionut olteanu1994 Data 4 martie 2011 12:12:52
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
#include<iostream>
using namespace std;
int k,smax,a[17][17],b[17],x[17],m,n,i,j;
FILE *f,*g;
void init(int k)
{
	x[k]=-1;
}
int succesor(int k)
{
	if(x[k]<1&&k<=m)
	{
		x[k]++;
		return 1;
	}
	return 0;
}
int valid (int k)
{
	return 1;
}
int solutie(int k)
{
	if(k==m)
		return 1;
	
	return 0;
}
void  tipar(int k)
{
	int s,sl,i,j;
	s=0;
	for(i=1;i<=n;i++)
	{
		sl=b[i];
		for(j=1;j<=m;j++)
			if(x[j]==1)
				sl=sl+2*(-1)*a[i][j];
		if(sl<-sl)
			s=s-sl;
		else
			s=s+sl;
	}
	
	if(s>smax)
		smax=s;
}
void back()
{
	int i,k;
	k=1;
	init(k);
	while(k>0)
	{
		i=0;
		while(i==0&&succesor(k))
			if(valid(k))
				i=1;
		if(i==1)
		{
			if(solutie(k))
				tipar(k);
			else
			{
				k++;
				init(k);
			}
		}
		else
			k--;
	}
}
int main ()
{
	
	f=fopen("flip.in","r");
	g=fopen("flip.out","w");
	fscanf(f,"%d %d",&n,&m);
	for(i=1;i<=n;i++)
	{
		b[i]=0;
		for(j=1;j<=m;j++)
		{
			fscanf(f,"%d",&a[i][j]);
			b[i]=b[i]+a[i][j];
		}
	}
	back();
	fprintf(g,"%d",smax);
}