Pagini recente » Cod sursa (job #2802530) | Cod sursa (job #54817) | Cod sursa (job #2278307) | Monitorul de evaluare | Cod sursa (job #350280)
Cod sursa(job #350280)
#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;
}