Cod sursa(job #552156)

Utilizator RoCoderRo COder RoCoder Data 11 martie 2011 19:00:49
Problema Jocul Flip Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <stdio.h>

long matrix[16][16];
int n, m;
long maxim;

void calc_max()
{
    long s1=0;
    int i, j;

    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            s1+=matrix[i][j];

    if(s1>maxim) maxim = s1;
}

void bk(int i, int j)
{
    int k;

    if(i<n && j<m)
    {
        calc_max();
        for(k=0; k<n; k++)
            matrix[i][k]*=-1;
        bk(i+1, j);
        for(k=0; k<n; k++)
            matrix[i][k]*=-1;

        calc_max();
        for(k=0; k<m; k++)
            matrix[k][j]*=-1;
        bk(i, j+1);
        for(k=0; k<m; k++)
            matrix[k][j]*=-1;
    }
}


int main ()
{
    int i, j, k;
    long s1=0, s2=0;

    FILE *fi, *fo;
    fi=fopen("flip.in","r");
    fo=fopen("flip.out","w");

    fscanf(fi,"%d %d", &n, &m);

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


    for(k=0; k<n*m*2; k++)
    {
        for(i=0; i<n; i++)
        {
            s1=0;
            s2=0;
            for(j=0; j<m; j++)
            {
                s1+=matrix[i][j];
                s2+=matrix[i][j]*(-1);
            }

            if(s2>s1)
                for(j=0; j<m; j++)
                    matrix[i][j]*=-1;
        }

        for(j=0; j<m; j++)
        {
            s1=0;
            s2=0;
            for(i=0; i<n; i++)
            {
                s1+=matrix[i][j];
                s2+=matrix[i][j]*(-1);
            }

            if(s2>s1)
                for(i=0; i<n; i++)
                    matrix[i][j]*=-1;
        }
    }

    calc_max();
    fprintf(fo,"%d", maxim);

    fclose(fi);
    fclose(fo);
}