Cod sursa(job #542496)

Utilizator ConsstantinTabacu Raul Consstantin Data 26 februarie 2011 14:20:06
Problema Pixels Scor 0
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 1.24 kb
#include<stdio.h>
#define max(a,b) a>b?a:b

int i,j,k,l,m,n;
int c1[100][100],c2[100][100],c3[100][100],c4[ 100 ][ 100 ];
int a[ 100 ][ 100],b[ 100 ][ 100 ],sol;
bool v[ 100 ][ 100 ];

void citire(){
freopen("pixels.in","r",stdin);
scanf("%d",&n);
int i,j;
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",&c1[i][j],&c2[i][j],&c3[i][j],&c4[i][j]);
sol  = (-1) * ( 1 << 30);

}


void check(){
int r = 0;
int i,j;
for(i = 1 ;i <= n ;i++)
	for(j = 1 ; j <= n ;j++)
		{if(v[i][j])
			r+=a[i][j];
		else
			r+=b[i][j];
		
		if(v[i][j] != v[i-1][j])
			r -= c1[i][j];
		if(v[i][j] != v[i][j-1])
			r-= c3[i][j];
		}

	sol = max(sol,r);
	
}
void back(int i,int j){
if(i == j && j == n)
	{v[i][j ] = true;
	check();
	v[i][j] = false;
	check();
	
	return;}

v[i][j] = true;

if(j == n)
	back(i+1,1);
else
	back(i,j+1);
v[i][j] = false;
if(j == n)
	back(i+1,1);
else
	back(i,j+1);
	
}
void afisare(){
freopen("pixels.out","w",stdout);
printf("%d",sol);

}
int main(){
citire();
back(1,1);
afisare();

return 0;}