Cod sursa(job #696247)

Utilizator andreidanAndrei Dan andreidan Data 28 februarie 2012 17:43:04
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
int comb[1000000]; 
int a[100][100],mat[100][100];

bool ex(int n,int i){
	if( (1<<i) & n ) return 1;
	return 0;
}

int main(){
	
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	
	int n,i,j,dim=1,m,cont=0,max=-11111111,ver=0,in,su=0,supart=0;
	
	scanf("%d %d",&m, &n);
	
	for(i=1;i<=m;++i)
		for(j=1;j<=n;++j)
			scanf("%d", &a[i][j]);
	
	for( i=1 ; i<(1<<n) ; i++ ){
		for( j=0 ; (1<<j)<=i ; j++ )
			if( ex(i,j) )
				comb[dim]=(comb[dim]+(j+1))*10;
		comb[dim]/=10;
		++dim;
		cont++;
	}
	
	dim=1;
	while(cont){
		su=0;
		ver=0;
		for(i=1;i<=m;++i)
				for(j=1;j<=n;++j)
					mat[i][j]=a[i][j];
				
		while(comb[dim]!=0){
			in=comb[dim]%10;
			comb[dim]/=10;
			//printf("%d", in);
			for(i=1;i<=m;++i){
				mat[i][in]=(a[i][in])*(-1);
				
			}
			
			
		}
		for(i=1;i<=m;++i){
			supart=0;
				for(j=1;j<=n;++j)
					supart+=mat[i][j];
				if(supart<0) supart=supart*-1;
				su=su+supart;
				
		}
		if(su>=max) max=su;
		++dim;
		--cont;
		
	}
	printf("%d", max);
	return 0;
		
}