Cod sursa(job #222951)

Utilizator razyelxrazyelx razyelx Data 26 noiembrie 2008 13:36:39
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>
long long n,k,ev,as,s,Ts[17],m,a[17][17],st[100];
FILE*in = fopen("flip.in","r");
FILE*out= fopen("flip.out","w");
void init(){
		st[k]=-1;

}
int succesor(){
	if(st[k]<1){
		st[k]++;
		return 1;
	}else
		return 0;

}
int valid(){
	return 1;
}
int solutie(){
	return k==m;
}
void tipar(){
	int i,j;
	int s1=0,s2=0;

	for(i=1;i<=n;i++){
	   s1=0;
	   s2=0;
	   for(j=1;j<=m;j++)

		if(st[j] == 0){
			s1 += a[i][j];
			s2 -= a[i][j];
		}else{
			s1 -=a[i][j];
			s2 +=a[i][j];
		}

	   if(s1>s2 && s1>Ts[i])Ts[i] = s1;
	   if(s2>s1 && s2>Ts[i])Ts[i] = s2;
	}

}
void bt(){
	k=1;
	init();
	while(k){
		as=1;ev=0;
		while(as && !ev){
			as=succesor();
			if(as) ev=valid();
		}
		if(as)
			if(solutie()){tipar();}
			else{k++;init();}
		else
			k--;
	}
}
int main(){
	int i,j;
	fscanf(in,"%lld%lld", &n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			fscanf(in,"%lld", &a[i][j]);
	bt();
	s=0;
	for(i=1;i<=n;i++)
	   s+=Ts[i];
	fprintf(out, "%lld",s);
	return 0;
}