Cod sursa(job #1205343)

Utilizator ValyGabrielMitrea Valentin Gabriel ValyGabriel Data 6 iulie 2014 02:55:30
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>

using namespace std;


int sumaMatrice(int n, int m, int matrix[16][16])
{
	int suma = 0;

	for (int i = 0; i < n; i ++)
		for (int j = 0; j < m; j ++)
			suma += matrix[i][j];

	return suma;
}


int incrementVector(char *vector, int length)
{
	for (int i = length - 1; i >= 0; i --)
		if (vector[i] == 0)
		{
			vector[i] ++;
			for (int j = i + 1; j < length; j ++)
				vector[j] = 0;

			return 1;
		}

	return 0;
}


int joculFlip(int n, int m, int matrix[16][16])
{
	int suma, sumaMax, aux, length = n + m;
	char *vector = (char*)calloc(n + m, sizeof(char));


	suma = sumaMatrice(n, m, matrix);
	sumaMax = suma;

	for (;;)
	{
		if (incrementVector(vector, length) == 0)
			break;

		aux = suma;

		for (int i = 0; i < n; i ++)
			for (int j = 0; j < m; j ++)
				if ( (vector[i] == 0 && vector[n + j] == 1) || (vector[i] == 1 && vector[n + j] == 0) )
					aux -= 2 * matrix[i][j];

		if (aux > sumaMax)
			sumaMax = aux;
	}

	free(vector);


	return sumaMax;
}


int main(int argc, char** argv)
{
    int n, m, matrix[16][16];
    
    ifstream in("flip.in");
    ofstream out("flip.out");
    
    in >> n;
	in >> m;

	for (int i = 0; i < n; i ++)
		for (int j = 0; j < m; j ++)
			in >> matrix[i][j];
	

    out << joculFlip(n, m, matrix);


    in.close();
	out.close();
    
    return 0;
}