Cod sursa(job #703792)

Utilizator harababurelPuscas Sergiu harababurel Data 2 martie 2012 14:29:55
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
int n, m, st[20], a[20][20], smax=-INT_MAX;
ifstream f("flip.in");
ofstream g("flip.out");

void citire() {
	int i, j;
	f>>n>>m;
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			f>>a[i][j];
		}
	}
}
void tipar() {
	int i;
	for(i=1; i<=m; i++) cout<<st[i]<<" ";
	cout<<"\n";
}

int verifica() {
	int i, j, s;
	//intorc coloanele in functie de valorile stivei
	for(j=1; j<=m; j++) {
		if(st[j]==1) {
			for(i=1; i<=n; i++) a[i][j]*=-1;
		}
	}
	
	for(i=1; i<=n; i++) {
		s=0;
		for(j=1; j<=m; j++) s+=a[i][j];
		if(s<0) { for(j=1; j<=m; j++) a[i][j]*=-1; }
	}
	s=0;
	for(i=1; i<=n; i++) {
		for(j=1; j<=m; j++) {
			s+=a[i][j];
		}
	}
	
	for(j=1; j<=m; j++) {
		if(st[j]==1) {
			for(i=1; i<=n; i++) a[i][j]*=-1;	//revin la starea initiala
		}
	}
	
	return s;
}


void back(int k) {
	int i, stemporar;
	for(i=1; i>=0; i--) {
		st[k]=i;
		if(k==m) { 
			stemporar=verifica();
			if(stemporar>smax) smax=stemporar;
			//tipar();  
		}
		else back(k+1);
	}
}


int main() {
	citire();
	back(1);
	g<<smax;
	f.close();
	g.close();
	return 0;
}