Cod sursa(job #742120)

Utilizator caliuxSegarceanu Calin caliux Data 28 aprilie 2012 16:35:30
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <string.h>

int n, m, k, d;
int st[20], mat[20][20], vec[20];
long long suma = 0, sumamax = 0, ns, i, j;
void citeste(){
	freopen( "flip.in", "r", stdin);
	freopen( "flip.out", "w", stdout);
	scanf( "%d%d", &n, &m );
	for( i = 1; i <= n; i++){
		for( j = 1; j <=m; j++){
			scanf( "%d", &mat[i][j] );
			sumamax += mat[i][j];
		}
	}
}

void scrie(){
	printf("%lld ", sumamax);
}

void calcul(){
	
	memset( vec, 0, sizeof(vec) );
	for( k = 1 ; k <= n; k++){
		for( d = 1; d <= m; d++ ){
			vec[d] += mat[k][d] * st[k-1];
		}
	}
	suma = 0;
	for( k = 1; k <= m; k++ ){
		if( vec[k] < 0 ){
			suma += vec[k] * (-1);
		}else{
			suma += vec[k];	
		}
	}
	if( suma > sumamax ){
		sumamax = suma;
	}
}

void genereaza(){
	ns = ( 1 << n ) - 1;
	for( i = 1; i <= ns ; i++ ){
		memset( st, 0, sizeof(st) );
		for( j = 0; j < n; j++ ){
			if(i&(1<<j)){
				st[j] = -1;
			}else{
				st[j] = 1;
			}
		}
		calcul();
	}
}

int main(){
	citeste();
	genereaza();
	scrie();
}