Pagini recente » Cod sursa (job #3176856) | Istoria paginii utilizator/tudosesanziana | Cod sursa (job #1058115) | Cod sursa (job #1662287) | Cod sursa (job #542392)
Cod sursa(job #542392)
#include <algorithm>
using namespace std;
#define DIM 105
#define MAX 4
int a[DIM][DIM],b[DIM][DIM],c[DIM][DIM][4];
bool val[DIM][DIM];
int nr[DIM];
int N,nrt;
void read ()
{
int i,j,k;
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)
for (k=0; k<MAX; ++k)
scanf ("%d",&c[i][j][k]);
}
inline void check_sol ()
{
int i,j,nrc;
nrc=0;
for (i=1; i<=N; ++i)
for (j=1; j<=N; ++j)
{
if (nr[i]&(1<<(j-1)))
val[i][j]=1;
else
val[i][j]=0;
if (val[i][j])
nrc+=a[i][j];
else
nrc+=b[i][j];
if (val[i][j]!=val[i-1][j])
nrc-=c[i][j][0];
if (val[i][j]!=val[i][j-1])
nrc-=c[i][j][3];
}
nrt=max (nrt,nrc);
}
void back (int linie)
{
int i;
if (linie==N+1)
check_sol ();
else
for (i=0; i<(1<<N); ++i)
{
nr[linie]=i;
back (linie+1);
}
}
int main ()
{
freopen ("pixels.in","r",stdin);
freopen ("pixels.out","w",stdout);
read ();
back (1);
printf ("%d",nrt);
return 0;
}