class Solution { public: int f(int ind, vector<int> &nums, vector<int> &dp) { if(ind == 0) return nums[ind]; if(ind < 0) return 0; if(dp[ind] != -1) return dp[ind]; int pick = nums[ind] + f(ind - 2, nums, dp); int notPick = 0 + f(ind - 1, nums, dp); return dp[ind] = max(pick, notPick); } int rob(vector<int>& nums) { int n=nums.size(); vector<int> dp(nums.size()+2,-1); int a = f(n-1,nums,dp); return a; } };