Cod sursa(job #1481479)

Utilizator amneCornel Cruceru amne Data 4 septembrie 2015 16:35:11
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <stdio.h>
#include <stdlib.h>

#define N 16
#define M 16

int flip[N][M], sign_lines[N], max_sum, n, m;

int current_line_mask = 0, current_column_mask = 0;

int sum_matrix(int n, int m, int flip[N][M]){
    int sum = 0, line_sum = 0, i ,j;
    for(j=0;j<m;j++){
	line_sum = 0;
	for(i=0;i<n;i++){
	    if(sign_lines[i]){
		line_sum -= flip[i][j];
	    } else {
		line_sum += flip[i][j];
	    }
	}
	if(line_sum < 0){
	    sum -= line_sum;
	} else {
	    sum += line_sum;
	}
    }
    return sum;
}


void show_matrix(int n, int m, int flip[N][M]){

    int i,j;
    for(i=0;i<n;i++){
	for(j=0;j<m;j++){
	    printf("%d ",flip[i][j]);
	}
	printf("\n");
    }

}


int start(int k){
//     printf("k=%d; max_sum=%d \n",k,max_sum);
    if(k>n-1){
	int s = sum_matrix(n,m,flip);
	if(s>max_sum){
	    max_sum = s;
	}
    } else {
	sign_lines[k] = 0;
	start(k+1);
	sign_lines[k] = 1;
	start(k+1);
    }
}


int main(){

    int i, j;
    FILE *f = fopen("flip2.in","r");
    
    fscanf(f,"%d %d", &n, &m);
    for(i=0;i<n;i++){
	for(j=0;j<m;j++){
	    fscanf(f,"%d", &flip[i][j]);
	}
	sign_lines[i] = 0;
    }
// printf("\n%d\n", sum_matrix(n,m,flip));
// show_matrix(n,m,flip);
 start(0);
// printf("\n%d\n", max_sum);

//    show_matrix(n,m,flip);
    f = fopen("flip.out","w");
    fprintf(f,"%d",max_sum);
    fclose(f);

    return 0;
}