Cod sursa(job #1987630)

Utilizator SteveWOproiu Stefan SteveW Data 31 mai 2017 13:45:17
Problema Jocul Flip Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
char input[20] = "flip.in";
char output[20] = "flip.out";
char n, m, x, v[20][20];
short l[20], c[20];
short sel[40];
int max = INT_MIN;

void suma()
{
    int s = 0,i,j;
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
        {
            if (!l[i] && !c[j] || l[i] && c[j])
                s += v[i][j];
            else
                s -= v[i][j];
        }
    if (s>max) max=s;
}
void afisare()
{
    int i;
    for (i = 0; i < m + n; i++)
        printf("%d ", sel[i]);
    putchar('\n');
}
int solutie(int k)
{
    if(k==x-1) return 1;
    else return 0;
}
void back(int k)
{
    int i, j;
    if (k > x)
        return;
    for (i = 0; i < 2; i++)
    {
        sel[k] = i;
        if (k<n) l[k]=i;
        else c[k-n]=i;
    if (solutie(k))
        suma();
    else back(k+1);
    }
}
int main()
{
    FILE *f = fopen(input, "r");
    FILE *g = fopen(output, "w");
    fscanf(f, "%d", &n);
    fscanf(f, "%d", &m);

    int i, j;
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            fscanf(f, "%d", &v[i][j]);
    x = m + n;
    for (i = 0; i < n; i++)
        l[i] = 0;
    for (j = 0; j < m; j++)
        c[j] = 0;
    for (i = 0; i < n + m; i++)
        sel[i] = 0;
    back(0);

    fprintf(g,"%d",max);
    fclose(f);
    fclose(g);
    return 0;
}