Cod sursa(job #1320510)

Utilizator HoreaOrosHorea Oros HoreaOros Data 18 ianuarie 2015 00:45:54
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <stdio.h>
#include <stdlib.h>
#define MAX 64

int board[16][16];

void init(int v[], int k)
{
    v[k] = -3;
}

int succesor(int v[], int k)
{
    int as = 0;
    if(v[k] < 1)
    {
        v[k] += 2;
        as = 1;
    }
    return as;
}



void flip(int n, int m)
{
    int v[MAX] = {0};
    FILE *g;
    int k = 0, as;
    int max = -(1 << 30);
    int suma, sumaLinie, i, j;




    init(v, k);
    while(k >= 0)
    {
        as = succesor(v, k);

        if(as)
        {
            if(k == m - 1)
            {
                //am solutie
                // calculez suma
                suma = 0;
                for(i = 0; i < n; i++)
                {
                    sumaLinie = 0;
                    for(j = 0; j < m; j++)
                        sumaLinie += board[i][j] * v[j];
                    if(sumaLinie > 0)
                        suma += sumaLinie;
                    else
                        suma -= sumaLinie;
                }


                if(suma > max)
                    max = suma;
            }
            else
            {
                k++;
                init(v, k);
            }
        }
        else
            k--;
    }

    g = fopen("flip.out", "w");
    fprintf(g, "%d", max);
    fclose(g);
}



int main()
{
    FILE* f;
    int n, m;
    int i, j;

    f = fopen("flip.in", "r");
    fscanf(f, "%d %d", &n, &m);

    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
            fscanf(f, "%d", &board[i][j]);
    fclose(f);

    flip(n, m);

    return 0;
}