Cod sursa(job #2331752)

Utilizator alin_uAlin Ungureanu alin_u Data 29 ianuarie 2019 21:29:03
Problema Jocul Flip Scor 0
Compilator c-32 Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <stdio.h>
#include <limits.h>
#include <math.h>


int N, M, sumMax, currentSum;
int table[16][16];


unsigned int power(unsigned int a, unsigned int b)
{
    unsigned int i, p;
    p = 1;
    for (i = 0; i < b; i ++)
    {
        p = p * a;
    }

    return p;
}


int computeSum(unsigned int rowsFlip, unsigned int colsFlip)
{
    int i, j, sum = 0, minusOn;
    printf("rowsflip=%x, colsFlip=%x\n", rowsFlip, colsFlip);
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            minusOn = (((rowsFlip >> i) & 0x00000001) + ((colsFlip >> j) & 0x00000001)) % 2;
            if (minusOn)
            {
                sum -= table[i][j];
            }
            else
            {
                sum += table[i][j];
            }

        }
    }
    return sum;
}

void printMatrix(void)
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            printf("%d ", table[i][j]);
        }
        printf("\n");
    }
    printf("printing finished\n");
}

void readInput(void)
{
    int i, j;

    scanf("%d", &N);
    scanf("%d", &M);
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            scanf("%d", &table[i][j]);
        }
    }
}

void iterateThroughSolutions(void)
{
    unsigned int i, j;

    for (i = 0; i < power(2, N - 1); i++)
    {
        for (j = 0; j < power(2, M); j++)
        {
            currentSum = computeSum(i,j);
            if (currentSum > sumMax)
            {
                sumMax = currentSum;
            }
        }
    }
}


int main(void)
{
    sumMax = INT_MIN;
    currentSum = INT_MIN;
    readInput();
    //printMatrix();
    iterateThroughSolutions();

    printf("%d", sumMax);

    return 0;
}