Cod sursa(job #583546)

Utilizator alinhAlin H alinh Data 20 aprilie 2011 19:50:59
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <iostream>

using namespace std;

fstream f;
int n,m;
int a[17][17];
int b[17][17];

int sl[17];
int sc[17];

int maxim = -99999999;

void suma()
{
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			b[i][j] = a[i][j];

	for (int i=1; i<=n; i++)
		if (sl[i] == -1)
			for (int j=1; j<=m; j++)
				b[i][j] = -b[i][j];

	for (int j=1; j<=m; j++)
		if (sc[j] == -1)
			for (int i=1; i<=n; i++)
				b[i][j] = -b[i][j];

	int sum = 0;
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			sum += b[i][j];

	if (sum > maxim)
	{
		cout << "SOLUTIE NOUA:" << endl;
		cout << "linii: ";
		for (int i=1; i<=n; i++)
			cout << sl[i] << " ";
		cout << endl;
		cout << "coloane: ";
		for (int i=1; i<=m; i++)
			cout << sc[i] << " ";
		cout << endl;
		cout << "scor: " << sum << endl;
		maxim = sum;
	}
}

void backcoloane(int p)
{
	for (int k=-1; k<=1; k=k + 2)
	{
		sc[p] = k;
		if (p == m)
			suma();
		else
			backcoloane(p+1);
	}
}

void backlinii(int p)
{
	for (int k=-1; k<=1; k=k+2)
	{
		sl[p] = k;
		if (p == n)
			backcoloane(1);
		else
			backlinii(p+1);
	}
}

int main()
{
	f.open("flip.in",ios::in);
	f >> n >> m;
	for (int i=1; i<=n; i++)
		for (int j=1; j<=m; j++)
			f >> a[i][j];
	f.close();
	backlinii(1);
	f.open("flip.out",ios::out);
	f << maxim;
	f.close();
	system("PAUSE");
	return 0;
}