Cod sursa(job #2381873)

Utilizator mihaelamihaiuMihaela Mihaiu mihaelamihaiu Data 17 martie 2019 13:52:13
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul II Marime 1.05 kb
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <math.h>

int n, m, a[16][16], s, stemp;
int suma_linii[16];

void back(int it)
{
	if (it == m)
	{
		stemp = 0;
		for (int i = 0; i < n; i++)
			if (suma_linii[i] > 0)
				stemp += suma_linii[i];
			else
				stemp += -suma_linii[i];
		s = s > stemp ? s : stemp; //facem suma modulelor sumelor de pe fiecare linie si retinem rezultatul cel mai mare
		return;
	}

	back(it + 1);

	for (int i = 0; i < n; i++)
		suma_linii[i] -= 2 * a[i][it]; //comutarea coloanei it

	back(it + 1);

	for (int i = 0; i < n; i++)
		suma_linii[i] += 2 * a[i][it]; //comutarea inapoi a coloanei it
}

int main()
{
	int i, j;
	FILE *fin, *fout;

	fin = fopen("flip.in", "r");
	fout = fopen("flip.out", "w");

	fscanf(fin, "%d %d", &n, &m);

	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
		{
			fscanf(fin, "%d", &a[i][j]);
			suma_linii[i] += a[i][j]; //memoram suma de pe fiecare linie
		}

	back(0);

	fprintf(fout, "%d", s);

	fclose(fin);
	fclose(fout);

	return 0;
}