Cod sursa(job #542551)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 26 februarie 2011 14:52:37
Problema Pixels Scor 10
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 1.1 kb
#include <stdio.h>

int v[17],sol,n,a[5][5],b[5][5],c[4][5][5];

void back(int x)
{
    if (x==17)
    {
        int s=0,i,j;
        for (i=1;i<=4;++i)
            for (j=1;j<=4;++j)
            {
                if (v[(i-1)*n+j]==0) s+=a[i][j];
                else s+=b[i][j];
                if (v[(i-1)*n+j]+v[(i-1)*n+j+1]==1) s-=c[1][i][j];
                if (v[(i-1)*n+j]+v[i*n+j]==1) s-=c[2][i][j];
            }
        if (s>sol) sol=s;
        return;
    }
    back(x+1);
    v[x]=1;
    back(x+1);
    v[x]=0;
}

int main()
{
    int i,j;
    freopen("pixels.in","r",stdin);
    freopen("pixels.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i)
        for (j=1;j<=n;++j)
            scanf("%d",&a[i][j]);
    for (i=1;i<=n;++i)
        for (j=1;j<=n;++j)
            scanf("%d",&b[i][j]);
    for (i=1;i<=n;++i)
        for (j=1;j<=n;++j)
            scanf("%d%d%d%d",&c[0][i][j],&c[1][i][j],&c[2][i][j],&c[3][i][j]);
    for (i=1;i<=4;++i)
    {
        v[4*n+i]=-1;
        v[(i-1)*n+5]=-1;
    }
    back(1);
    printf("%d",sol);
    return 0;
}