Pagini recente » Cod sursa (job #2175990) | Cod sursa (job #1801881) | Cod sursa (job #2266046) | Cod sursa (job #409801) | Cod sursa (job #542493)
Cod sursa(job #542493)
#include<cstdio>
#include<iostream>
const int lin[4]={-1,0,1, 0},
col[4]={0, 1,0,-1};
struct pix
{
int cul[2],c[4];
bool px;//0=alb,1=negru
};
int n;
pix v[100][100]={0};
int max=0;
inline void Cost(int& cost)
{
cost=0;
register int i,j;
for(i=0;i<n;++i)
{
for(j=0;j<n;j+=2)
if(v[i][j].px!=v[i+1][j].px)
cost+=v[i][j].c[2];
for(j=1;j<n;j+=2)
{
if(v[i][j].px!=v[i][j+1].px)
cost+=v[i][j].c[1];
if(v[i][j].px!=v[i+1][j].px)
cost+=v[i][j].c[2];
if(v[i][j].px!=v[i][j-1].px)
cost+=v[i][j].c[3];
}
}
//poz pare->calc pt vecinii din stg + dr + jos
//poz imp->calc pt vecinul de jos doar
}
inline void Pleasure(int& placere)
{
placere=0;
register int i,j;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
placere+=v[i][j].cul[v[i][j].px];
int cost;
Cost(cost);
placere-=cost;
}
inline void back(int ki,int kj)
{
if(kj>=n)
kj=0,ki++;
if (ki>=n)
{
int pl;
Pleasure(pl);
if(pl>max)
max=pl;
return;
}
register int i,j,ii,jj;
for(i=ki;i<n;++i)
{
for(j=kj;j<n;++j)
{
back(i,j+1);
for(jj=j+1;jj<n;++jj)
v[i][jj].px=0;
for(ii=i+1;ii<n;++ii)
for(jj=0;jj<n;++jj)
v[ii][jj].px=0;
v[i][j].px=1;
back(i,j+1);
for(jj=j+1;jj<n;++jj)
v[i][jj].px=0;
for(ii=i+1;ii<n;++ii)
for(jj=0;jj<n;++jj)
v[ii][jj].px=0;
}
}
}
int main()
{
freopen("pixels.in","r",stdin);
freopen("pixels.out","w",stdout);
scanf("%d",&n);
memset(v,0,sizeof(v));
register int i,j,k;
for( i=0;i<n;++i)
for( j=0;j<n;++j)
scanf("%d",&v[i][j].cul[0]);
for( i=0;i<n;++i)
for( j=0;j<n;++j)
scanf("%d",&v[i][j].cul[1]);
for( i=0;i<n;++i)
for( j=0;j<n;++j)
for( k=0;k<4;++k)
scanf("%d",&v[i][j].c[k]);
back(0,0);
printf("%d\n",max);
return 0;
}