int f(int ind,int buy, vector<int>& nums ,vector<vector<int>>& dp ) { if(ind==(nums.size())) return 0; if(dp[ind][buy]!=-1) return dp[ind][buy]; int profit; if(buy) profit = max((-nums[ind]+f(ind+1,0,nums,dp)),(f(ind+1,1,nums,dp))); else profit = max((nums[ind]+f(ind+2,1,nums,dp)),(f(ind+1,0,nums,dp))); return dp[ind][buy]=profit; } int maxProfit(vector<int>& prices) { int n = prices.size(); vector<vector<int>> dp(n,vector<int>(2,-1)); return f(0,1,prices,dp); }