Cod sursa(job #2425813)

Utilizator Ionut_BogoiBogoi Ionut Ionut_Bogoi Data 25 mai 2019 06:26:59
Problema Jocul Flip Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <stdio.h>
#include <stdlib.h>
int sum(int **a,int N,int M,int k,int sp)
{
    int i,s=sp;
    if(k<N)
    {
        for(i=0;i<M;i++)
        {
            s=s-2*a[k][i];
        }
    }
    else
    {
        for(i=0;i<N;i++)
        {
            s=s-2*a[i][k-N];
        }
    }
    return s;
}

void sumMax(int **a,int N,int M,int k,int *max,int sp)
{
    int n=M+N-1,i,j,s;
    for(i=0;i<=1;i++)
    {
        if(i==0)
        {
            s=sp;
        }
        else
        {
            s=sum(a,N,M,k,sp);
        }
        if(k==n)
        {
            if(s > *max)
            {
                *max=s;
            }
        }
        else
        {
            sumMax(a,N,M,k+1,max,s);
        }
    }
}

int main()
{
    int N,M,i,j,**a,sp=0;
    FILE *f,*g;
    f=fopen("flip.in","r");
    g=fopen("flip.out","w");
    fscanf(f,"%d%d",&N,&M);
    a=(int**)malloc(N*sizeof(int*));
    for(i=0;i<N;i++)
    {
        a[i]=(int*)malloc(M*sizeof(int));
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<M;j++)
        {
            fscanf(f,"%d",&(a[i][j]));
            sp=sp+a[i][j];
        }
    }
    int max=0;
    sumMax(a,N,M,0,&max,sp);
    fprintf(g,"%d",max);
    for(i=0;i<N;i++)
    {
        free(a[i]);
    }
    free(a);
    fclose(f);
    fclose(g);
    return 0;
}