Cod sursa(job #1053150)

Utilizator deaconusabinDeaconu Sabin deaconusabin Data 12 decembrie 2013 13:33:20
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>

int sum_matrix(int matrix[16][16],int lines, int cols)
{
    int sum = 0;
    int i,j;
    for (i=0; i < lines; i++)
        for (j=0; j < cols; j++)
            sum+= matrix[i][j];

    return sum;
}
int change_line(int matrix[16][16], int n, int m, int no_line)
{
    if(no_line >= n+m)
        return 0;
    int j;
   if(no_line < n)
        for (j=0; j< m; j++)
            matrix[no_line][j] *= (-1);
    else
        for (j=0; j< n; j++)
            matrix[j][no_line%n] *= (-1);
            
    return 0;
}

void calc_sum(int matrix[16][16], int lines, int cols, int depth, int* max_sum)
{
    int sum = sum_matrix(matrix, lines, cols);
    if(*max_sum < sum)
        *max_sum = sum;
    if(depth >= lines+cols)
        return ;
    int i;
    for(i = depth; i<lines+cols; i++)
    {
        //do modify
        change_line(matrix, lines, cols, i);
        
        calc_sum(matrix, lines, cols, i+1,max_sum);
        //undo modify
        change_line(matrix, lines, cols, i);
    }
}


int main()
{
    freopen ("flip.in","r",stdin);
    freopen ("flip.out","w",stdout);
    
    int n,m;
    int matrix[16][16];
    scanf("%d", &n);
    scanf("%d", &m);
    int i=0, j=0;
    
    for (i =0 ; i < n; i++ )
        for (j=0; j < m; j++)
            scanf("%d", &matrix[i][j]);

    
    int max_sum = sum_matrix(matrix,n,m);
    calc_sum(matrix, n,m,0,&max_sum);

    printf("%d",max_sum);
    fclose(stdout);
    fclose(stdin);
    return 0;
}