Cod sursa(job #2381104)

Utilizator aquarius231Zorander aquarius231 Data 16 martie 2019 04:47:17
Problema Jocul Flip Scor 100
Compilator c-32 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <stdlib.h>

#define MAX(a,b) (((a)>(b))?(a):(b))

int suma_mat(int st[], int mat[], int m, int n)
{
	int suma_col = 0, suma = 0;
	for(int j = 0; j < n; ++j)
	{
		suma_col = 0;
		for(int i = 0; i < m; ++i)
		{
			suma_col += mat[i * n + j] * st[i];
		}
		suma += abs(suma_col);
	}
	return suma;
}

void backtrack(int st[], int nivel, int mat[], int m, int n, int* suma_max)
{
	if(nivel == m)
	{
		*suma_max = MAX(*suma_max, suma_mat(st, mat, m, n));
		return;
	}
	else
	{
		st[nivel] = 1;
		backtrack(st, nivel + 1, mat, m, n, suma_max);
		st[nivel] = -1;
		backtrack(st, nivel + 1, mat, m, n, suma_max);
	}
}

int main()
{
	FILE* input = fopen("flip.in", "r");
	FILE* output = fopen("flip.out", "w");
	int m = 0, n = 0;
	fscanf(input, "%d %d", &m, &n);
	int mat[m * n];
	int st[m];
	for(int i = 0; i < m; ++i)
	{
		for(int j = 0; j < n; ++j)
		{
			fscanf(input, "%d", &mat[i * n + j]);
		}
	}
	int suma_max = 0;
	backtrack(st, 0, mat, m, n, &suma_max);
	fprintf(output, "%i", suma_max);
	fclose(input);
	fclose(output);
	return 0;
}