Cod sursa(job #544062)

Utilizator APOCALYPTODragos APOCALYPTO Data 28 februarie 2011 22:58:03
Problema Pixels Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
using namespace std;

#include<iostream>
#include<fstream>

ofstream fout("pixels.out");
#define nmax 105
#define oo 0x3f3f3f3f
int cul[nmax][nmax],c[nmax][nmax][5],a[nmax][nmax],b[nmax][nmax];
int N;
int ans=-oo;

void calculate()
{
    int sum=0;
    int i,j;
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=N;j++)
        {
            if(cul[i][j]==1)
            {
                sum+=a[i][j];
            }
            else sum+=b[i][j];
            if(cul[i][j]!=cul[i-1][j])
            {
                sum-=c[i][j][0];
            }
            if(cul[i][j]!=cul[i][j-1])
            {
                sum-=c[i][j][3];
            }
        }
    }
    if(sum>ans)
      ans=sum;
    /*if(sum==26)
    {
        fout<<cul[1][1]<<cul[1][2]<<"\n";
        fout<<cul[2][1]<<cul[2][2]<<"\n";
        cout<<c[1][2][3]<<" "<<c[2][2][0]<<"\n";
    }*/
}

void give_val(int k)
{
    if(k>N*N)
    {
        calculate();
    }
    else
    {
      for(int i=0;i<=1;i++)
      {
          cul[(k-1)/N+1][k-((k-1)/N)*N]=i;
          give_val(k+1);
      }
    }
}

void cit()
{
    int i,j;
    ifstream fin("pixels.in");
    fin>>N;
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=N;j++)
        {
            fin>>a[i][j];
        }
    }
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=N;j++)
        {
            fin>>b[i][j];
        }
    }
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=N;j++)
        {
            fin>>c[i][j][0];///sus(i-1,j)
            fin>>c[i][j][1];///dreapta(i,j+1)
            fin>>c[i][j][2];///jos(i+1,j)
            fin>>c[i][j][3];///stanga(i,j-1)
        }
    }
    fin.close();

}

int main()
{
   cit();
   give_val(1);
   fout<<ans<<"\n";
   fout.close();
   return 0;

}