Pagini recente » Cod sursa (job #1697949) | Cod sursa (job #786660) | Cod sursa (job #854077) | Cod sursa (job #860948) | Cod sursa (job #542464)
Cod sursa(job #542464)
#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};
bool rez[100][100];
int max=0;
inline void Cost(int& cost)
{
cost=0;
for(register int i=0;i<n;++i)
{
for(register int j=0;j<n;j+=2)
if(v[i][j].px!=v[i+1][j].px)
cost+=v[i][j].c[2];
for(register int 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;
for(register int i=0;i<n;++i)
for(register int 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;
}
for(register int j=kj;j<n;++j)
v[ki][j].px=0;
for(register int i=ki+1;i<n;++i)
for(register int j=0;j<n;++j)
v[i][j].px=0;
for(register int i=ki;i<n;++i)
{
for(register int j=kj;j<n;++j)
{
back(i,j+1);
v[i][j].px=1;
back(i,j+1);
}
}
}
int main()
{
freopen("pixels.in","r",stdin);
freopen("pixels.out","w",stdout);
scanf("%d",&n);
//memset(v,0,sizeof(v));
for(register int i=0;i<n;++i)
for(register int j=0;j<n;++j)
scanf("%d",&v[i][j].cul[0]);
for(register int i=0;i<n;++i)
for(register int j=0;j<n;++j)
scanf("%d",&v[i][j].cul[1]);
for(register int i=0;i<n;++i)
for(register int j=0;j<n;++j)
for(register int k=0;k<4;++k)
scanf("%d",&v[i][j].c[k]);
back(0,0);
printf("%d\n",max);
return 0;
}