Cod sursa(job #972418)

Utilizator andrei213Andrei Cibotaru andrei213 Data 11 iulie 2013 17:28:28
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>

using namespace std;



int mat [16][16];

int n, m, ma;

int insum(){
	int r = 0;

	for (int i = 0 ; i < m ; ++i){
		int t = 0;
		for (int j = 0; j < n ; ++j){
			t += mat[j][i];
		}
		r += (t<0)? t * (-1): t;
	}

return r;
	
}


void bt (int r){
   if ( r == n ){
	int t = insum();
	if (t> ma) ma = t;
   }
	else
	{

		
		for (int i = -1; i <= 1; ++i){
//		cout << "pas "<< r  << " "<< i  << endl;
		if (i){
			for (int j = 0 ; j < m ; ++j){
				mat[r][j] *= i;	
			}

//			for (int k = 0 ; k < n ; k++){
//				for (int l = 0 ; l < m ; ++l)
//					cout << mat[k][l] << " ";	
//				cout << endl;
//			}
//			cout << endl;

			bt (r+1);
//			cout << "iesit " << endl;
			for (int j = 0 ; j < m ; ++j){
				mat[r][j] *=  i;	
			}
			
			
//			for (int k = 0 ; k < n ; k++){
//				for (int l = 0 ; l < m ; ++l)
//					cout << mat[k][l] << " ";	
//				cout << endl;
//			}
//			cout << endl;
	
		}

		}
		
	
	}

}




int main (){
ma = 0;
ifstream ifs("flip.in", ios_base::in);
ofstream ofs("flip.out", ios_base::out);

int sum;
int result = 0;

if (!ifs.is_open()|| !ofs.is_open() )return -1;  
ifs >> n;
ifs >> m;

for (int i = 0 ; i < n ; ++i){
	for (int j = 0; j < m ; ++j){
		ifs >> mat[ i ][ j ] ;
	}		
}

bt (0);

ifs.close();


ofs<< ma << endl;

ofs.close();


return 0;
}