Problem Statement:
http://codeforces.com/problemset/problem/651/A
Approach :
We can solve the problem using simple DP memorization.
Solution :
#include<bits/stdc++.h> using namespace std ; //------------------------------- typedef long long ll ; typedef vector<int> vi ; typedef pair<int,int> ii ; //------------------------------- #define _CRT_SECURE_NO_WARNINGS #define pb(a) push_back(a) #define mp(a,b) make_pair(a,b) #define rep(i,a,b) for(ll i=(a) ; (i)<(b) ; ++i) #define inf 2000000000 #define endl "\n" #define de(x) cerr<<#x<<" is "<<x<<endl; #define max(a,b) ( (a>b) ? (a) : (b) ) #define min(a,b) ( (a<b) ? (a) : (b) ) //------------------------------ int ri() { char c = getchar(); while(c<'0' || c>'9') c=getchar(); int ret = 0; while(c>='0' && c<='9') { ret=10*ret+c-48; c=getchar(); } return ret; } int mx =0,x,y ; int dp[111][111]; int solve(int x,int y,int cnt) { if(x<0 || y<0) return -1; if(x==0 || y==0) { mx = max(mx, cnt) ; return mx; } if(dp[x][y]!=-1) return dp[x][y] ; dp[x][y] = max(solve(x-2,y+1,cnt+1),solve(x+1,y-2,cnt+1) ) ; return dp[x][y] ; } int main() { memset(dp,-1,sizeof dp); cin >> x >> y ; cout << max(0,solve(x,y,0)) ; }