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+1,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);
}