Cod sursa(job #1823450)

Utilizator ElitemdMaxim Cotruta Elitemd Data 6 decembrie 2016 13:03:47
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <string>
using namespace std;
ifstream inFile("flip.in");
ofstream out("flip.out");

int sum_schimb(int **a, int n, int m, string l, string c)
{
	int i, j, sum = 0;

	int** x = new int*[n];
	for (i = 0; i < n; ++i)
		x[i] = new int[m];

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < m; ++j)
		{
			x[i][j] = a[i][j];
		}
	}

	for (i = 0; i < n; ++i)
	{
		if (l[15-i] != '0')
		{
			for (j = 0; j < m; ++j)
			{
				x[i][j] *= -1;
			}
		}
	}

	for (i = 0; i < m; ++i)
	{
		if (c[15 - i] != '0')
		{
			for (j = 0; j < n; ++j)
			{
				x[j][i] *= -1;
			}
		}
	}

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < m; ++j)
		{
			sum += x[i][j];
		}
	}
	return sum;
}


int main()
{
	int n, m, i, j, max = 0, sum;

	inFile >> n >> m;

	int** a = new int*[n];
	for (i = 0; i < n; ++i)
		a[i] = new int[m];

	for (i = 0; i < n; ++i)
	{
		for (j = 0; j < m; ++j)
		{
			inFile >> a[i][j];
		}
	}
	
	string s;

	for (i = 0; i < pow(2,n)-1; ++i)
	{
		for (j = 0; j < pow(2,m)-1; ++j)
		{
			sum = sum_schimb(a, n, m, bitset< 16 >(i).to_string(), bitset< 16 >(j).to_string());
			if (sum > max)	max = sum;
		}
	}

	out << max;

	return 0;
}