Cod sursa(job #854297)

Utilizator mmdumiMihai Dumitrache mmdumi Data 13 ianuarie 2013 11:44:48
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

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

int compute(int **matrix, int l, int c, int swv, int swh)
{
	int i, j;
	
	// Compute sum
	int sum = 0;
	for (i = 0; i < l; i++) {
		for (j = 0; j < c; j++) {
			int swl = ((swv & i) == 0) ? 1 : -1;
			int swc = ((swh & j) == 0) ? 1 : -1;
			sum += matrix[i][j]*swl*swc;
		}
	}
	return sum;
}

int maxsum(int **matrix, int max, int *swv, int *swh, int l, int c)
{
	int i, j;
	int sum = 0;
	for (i = 0; i < pow(2, c); i++) {
		for (j = 0; j < l; j++) {
			int ts = compute(matrix, l, c, i, j);
			sum = MAX(sum, ts);
		}
	}
	
	// Search for other situations
	return sum;
}

int main()
{
	FILE *frd = fopen("flip.in", "r");
	FILE *fwd = fopen("flip.out", "w+");
	
	int val1, val2, r;
	int i, j;
	
	r = fscanf (frd, "%d", &val1);
	r = fscanf (frd, "%d", &val2);
	
	int **matrix = malloc(val1*sizeof(int *));
	for (i = 0; i < val1; i++) {
		matrix[i] = (int *)malloc(val2*sizeof(int));
	}

	for (i = 0; i < val1; i++) {
		for (j = 0; j < val2; j++) {
			fscanf (frd, "%d", &matrix[i][j]);
		}
	}
	
	int swv[val1];
	int swh[val2];
	
	for (i = 0; i < val1; i++) {
		swv[i] = 1;
	}
	for (i = 0; i < val2; i++) {
		swh[i] = 1;
	}
	
	//printf("max: %d", maxsum(matrix, 0, swv, swh, val1, val2));
	fprintf(fwd, "%d", maxsum(matrix, 0, swv, swh, val1, val2));

	fclose(frd);
	fclose(fwd);
	
	return 0;
}