Cod sursa(job #1320494)

Utilizator HoreaOrosHorea Oros HoreaOros Data 18 ianuarie 2015 00:25:39
Problema Jocul Flip Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.66 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;
}


int solutie(int k, int n, int m)
{
    if(k == n + m - 1)
        return 1;
    else
        return 0;
}

void tipar(FILE *g, int v[], int n)
{
    int i;
    for(i = 0; i < n; i++)
        fprintf(g, "%d ", v[i] + 1);
    fprintf(g, "\n");
}

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




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

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