Pagini recente » Cod sursa (job #756) | Cod sursa (job #1782050) | Cod sursa (job #2890781) | Cod sursa (job #2489252) | Cod sursa (job #1481479)
#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;
}