int f(int ind,int buy,int t, vector<int>& nums, vector<vector<vector<int>>>& dp) { if(ind==(nums.size()) || t==0) return 0; if(dp[ind][buy][t]!=-1) return dp[ind][buy][t]; int profit; if(buy && t) profit = max((-nums[ind]+f(ind+1,0,t,nums,dp)),(f(ind+1,1,t,nums,dp))); else profit = max((nums[ind]+f(ind+1,1,t-1,nums,dp)),(f(ind+1,0,t,nums,dp))); return dp[ind][buy][t]=profit; } int maxProfit(vector<int>& prices) { int n = prices.size(); vector<vector<vector<int>>> dp(n, vector<vector<int>>(2, vector<int>(3, -1))); return f(0,1,2,prices,dp); }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter