Cod sursa(job #805639)

Utilizator AthanaricCirith Gorgor Athanaric Data 31 octombrie 2012 20:24:45
Problema Jocul Flip Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <fstream>
const int size = 16;
int m,n;
int board[size][size];
int config[size];
int smax;

void alter() {
	for (int i=0; i<m; i++) {
		if (config[i]==1)
			for (int j=0; j<n; j++)
				board[j][i]*=-1;
	}
}

int sum() {
	int s, ps, ns;
	s = 0;
	for (int i=0; i<n; i++) {
		ps=ns=0;
		for (int j=0; j<m; j++) 
			if (board[i][j]>0)
				ps += board[i][j];
			else
				ns -= board[i][j];
		if (ps>ns)
			s = s+ps-ns;
		else
			s = s+ns-ps;
	}
	return s;
}				

void bkt(int k) {
	if (k==m) {
		alter();
		int sum_ = sum();
		if (sum_ > smax)
			smax = sum_;
		alter();
	}
	else {
		config[k]=0;
		bkt(k+1);
		config[k]=1;
		bkt(k+1);
	}
}
	
int main() {
	FILE *f = fopen("flip.in","r");
	FILE *g = fopen("flip.out","w");
	fscanf(f,"%d%d",&n,&m);
	for (int i=0; i<n; i++)
		for (int j=0; j<m; j++)
			fscanf(f, "%d",&board[i][j]);
	bkt(0);	
	fprintf(g,"%d ",smax);
	fclose(f);
	fclose(g);
	return 0;
}