Cod sursa(job #770793)

Utilizator toranagahVlad Badelita toranagah Data 23 iulie 2012 22:44:48
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
using namespace std;

ifstream fin;
ofstream fout;

int mat[16][16];
int M, N;
int result;

int find_sum();
void bkt_row( int row );
void bkt_column( int column );
void flip_column( int j );
void flip_row( int i );

int main()
{
	fin.open( "flip.in" );
	fin >> M >> N;
	for( int i = 0; i < M; ++i )
		for( int j = 0; j < N; ++j )
			fin >> mat[i][j];
	fin.close();
	result = find_sum();
	bkt_row( 0 );
	fout.open( "flip.out" );
	fout << result;
	fout.close();
	return 0;
}

void bkt_row( int row )
{
	if( row < M - 1 )
		bkt_row( row + 1 );
	if( row < M )
	{
		flip_row( row );
		int x = find_sum();
		result = result > x ? result : x;
		bkt_column( 0 );
		flip_row( row );
		bkt_row( row + 1 );
	}
}

void bkt_column( int column )
{
	if( column < N - 1 )
		bkt_column( column + 1 );
	if( column < N )
	{
		flip_column( column );
		int x = find_sum();
		result = result > x ? result : x;
		flip_column( column );
		bkt_column( column + 1 );
	}
}

void flip_column( int j )
{
	for( int i = 0; i < M; ++i )
	{
		mat[i][j] *= -1;
	}
}

void flip_row( int i )
{
	for( int j = 0; j < N; ++j )
	{
		mat[i][j] *= -1;
	}
}

int find_sum()
{
	int sum = 0;
	for( int i = 0; i < M; ++i )
		for( int j = 0; j < N; ++j )
			sum += mat[i][j];
	return sum;
}