Cod sursa(job #350280)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 23 septembrie 2009 12:04:46
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<cstdio>

using namespace std;

const int N = 160;

int a,b,v[N][N];

int cut( int x,int y )
{
	int r=0;
	if(a<=x && b<=y)
	{
	    if(v[x-a][b]==-1)
            v[x-a][b]=cut(x-a,b);
        if(v[x][y-b]==-1)
            v[x][y-b]=cut(x,y-b);
		r= (r > v[x-a][b]+v[x][y-b]+1 ? r : v[x-a][b]+v[x][y-b]+1) ;

        if(v[a][y-b]==-1)
            v[a][y-b]=cut(a,y-b);
        if(v[x-a][y]==-1)
            v[x-a][y]=cut(x-a,y);
		r= (r > v[y-b][a]+v[x-a][y]+1 ? r : v[y-b][a]+v[x-a][y]+1) ;
	}
	if(b<=x && a<=y)
	{
	    if(v[x-b][a]==-1)
            v[x-b][a]=cut(x-b,a);
        if(v[x][y-a]==-1)
            v[x][y-a]=cut(x,y-a);
		r= (r > v[x-b][a]+v[x][y-a]+1 ? r : v[x-b][a]+v[x][y-a]+1) ;

		if(v[b][y-a]==-1)
            v[b][y-a]=cut(b,y-a);
        if(v[x-b][y]==-1)
            v[x-b][y]=cut(x-b,y);
		r= (r > v[b][y-a]+v[x-b][y]+1 ? r : v[b][y-a]+v[x-b][y]+1) ;
	}
	return r;
}

void init()
{
    for( int i=0 ; i<N ; ++i )
        for( int j=0 ; j<N ; ++j )
            v[i][j]=-1;
}

int main()
{
	int x,y;
	freopen("cartoane.in","r",stdin);
	freopen("cartoane.out","w",stdout);
	init();
	scanf("%d%d%d%d",&x,&y,&a,&b);
	printf("%d\n",cut(x,y));
	return 0;
}