Cod sursa(job #2132203)

Utilizator vlavricVictor Lavric vlavric Data 15 februarie 2018 16:13:36
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <stdio.h>

typedef	struct structure
{
	long long plus, minus;
}struc;

void	readfrom(int *n, int *m, int a[25][25])
{
	FILE *f; int i, j;

	f = fopen("flip.in", "r");
	fscanf(f, "%d %d", n, m);
	for (i = 1; i <= *n; i++)
		for (j = 1; j <= *m; j++)
			fscanf(f, "%d", &a[i][j]);
	fclose(f);
}

void	output(long long s)
{
	FILE *g;

	g = fopen("flip.out", "w");
	fprintf(g, "%lli", s);
	fclose(g);
}

long long si = 0, sum = 0; int b[50];

void	print(int n, int *b)
{
	int i;

	for (i = 1; i <= n; i++)
		printf("%d ", b[i]);
	printf("\n");
}

void	let_sum(int n, int m, int a[25][25], int *b, int k)
{
	int c[25][25]; int i, j, f;

	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++)
			c[i][j] = a[i][j];
	si = 0;
	for (i = 1; i <= k; i++)
	{
		if (b[i] <= n)
		{
			for (j = 1; j <= m; j++)
				c[b[i]][j] = -a[b[i]][j];
		}
		else
		{
			for (f = 1; f <= n; f++)
			{
				c[f][b[i] % n] = -a[f][b[i] % n];
			}
		}
	}
	// for (i = 1; i <= n; i++)
	// {
	// 	for (j = 1; j <= m; j++)
	// 		printf("%3d ", c[i][j]);
	// 	printf("\n");
	// }
	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++)
			si += c[i][j];
	if (si > sum) sum = si;
	// printf("%lli\n", sum);
	// printf("\n----\n");
	//getchar();
}

void	back(int n, int m, int a[25][25], int *b, int k)
{
	int i, j, dis = 0;

	if (k > n + m) { return; }
	for (i = 1; i <= (n + m); i++)
	{
		dis = 0;
		for (j = 1; j < k; j++)
			if (b[j] == i) dis = 1;
		if (b[k - 1] > i) dis = 1;
		if (!dis ) {b[k] = i; let_sum(n, m, a, b, k); back(n, m, a, b, k + 1); }
	}
}

int	main(void)
{
	int n, m, a[25][25];

	readfrom(&n, &m, a);
	back(n, m, a, b, 1);
	output(sum);
	return (0);
}