Cod sursa(job #1438330)

Utilizator cristyshor_cCosulianu Cristi Mihail cristyshor_c Data 19 mai 2015 17:46:20
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <fstream>
using namespace std;
FILE *f=fopen("flip.in","r");
FILE *g=fopen("flip.out","w");
int v[420]={0},x[420]={0},s[420]={0};
int cont(int k)
{
    return 1;
}
int solutie(int k,int o)
{
    if(k==o)
        return 1;
    else
        return 0;
}
int tipar(int k,int o,int maxim)
{
    int p,suma=0;
    for(p=1;p<=o;p++)
    {
        if(x[p]==0)
            suma=suma+s[p];
        else
            suma=suma-s[p];
    }
    if(suma>maxim)
    {
        maxim=suma;
        for(p=1;p<=o;p++)
            v[p]=x[p];
    }
    return maxim;
}
void bkt(int o,int maxim)
{
    int k;
    k=1;
    x[k]=-1;
    while(k>0)
    {
        if(x[k]<1)
        {
            x[k]++;
            if(cont(k))
                if(solutie(k,o))
                    maxim=tipar(k,o,maxim);
                else
                {
                    k++;
                    x[k]=-1;
                }
        }
        else
        {
            k--;
        }
    }
}
int main()
{
    int n=0,m=0,a[50][50]={0},suma=0,i=0,j=0;
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fscanf(f,"%d",&a[i][j]);
            s[i]=s[i]+a[i][j];
        }
    }
    bkt(n,0);
    for(i=1;i<=n;i++)
    {
        if(v[i]==1)
            for(j=1;j<=m;j++)
                a[i][j]=0-a[i][j];
    }
    for(i=1;i<=m;i++)
    {
        s[i]=0;
        for(j=1;j<=n;j++)
        {
            s[i]=s[i]+a[j][i];
        }
    }
    bkt(m,0);
    for(i=1;i<=m;i++)
    {
        if(v[i]==1)
            for(j=1;j<=n;j++){
                a[j][i]=0-a[j][i];
                suma=suma+a[j][i];
            }
        else
            for(j=1;j<=n;j++){
                suma=suma+a[j][i];
            }
    }
    fprintf(g,"%d",suma);
    return 0;
}