Cod sursa(job #483059)

Utilizator edward_alexStanciu Alexandru Marian edward_alex Data 6 septembrie 2010 19:35:20
Problema BFS - Parcurgere in latime Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.03 kb
#include<stdio.h>
#include<stdlib.h>

int mat[100][100];

int max(int a,int b){
	return ((a > b) ? a : b);
}

int min(int a,int b){
	return a + b - max(a,b);
}

int cartoane(int l,int h,int a,int b){
	int r1,r2,r3,r4,aux;
	if(l==12 && h==13)
		printf("");
	if(a > l || b > h)
		return 0;
	if(mat[l][h] != 0)
		return mat[l][h];
	r1 = cartoane(min(a,h-b),max(a,h-b),a,b) + cartoane(l-a,h,a,b);
	if(b <= l)
		r2 = cartoane(l - b,h,a,b) + cartoane(min(b,h - a),max(b,l-h),a,b);
	else
		r2 = 0;
	aux = 1 + max(r1,r2);
	r3 = cartoane(min(l-a,b),max(l-a,b),a,b) + cartoane(min(h-b,l),max(h-b,l),a,b);
	if(b <= l)
		r4 = cartoane(min(l-b,a),max(l-b,a),a,b) + cartoane(min(l,h-a),max(l,h-a),a,b);
	else
		r4 = 0;
	mat[l][h] = max(aux,1+max(r3,r4));
	return mat[l][h];
}
	
int main(){
	int l,h,a,b;
	FILE *f,*g;
	f = fopen("cartoane.in","r");
	g = fopen("cartoane.out","w");
	fscanf(f,"%d%d",&l,&h);
	fscanf(f,"%d%d",&a,&b);
	int nr = cartoane(l,h,a,b);
	fprintf(g,"%d\n",nr);
	fclose(f);
	fclose(g);
	return 0;
}