House Robber Problem

PHOTO EMBED

Wed Jun 12 2024 07:15:08 GMT+0000 (Coordinated Universal Time)

Saved by @ayushg103 #c++

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;
        
    }
};
content_copyCOPY

Initially , you were complicating DP a lot First think what is your function returning int f(int ind,vector<int>& v,vector<int>& dp) { if(ind==0) return v[ind]; if(ind<0)return 0; int pick,nonpick; if(dp[ind-2]!=-1) pick = v[ind]+dp[ind-2]; else{ dp[ind-2]=f(ind-2,v,dp); pick = v[ind]+(dp[ind-2]);} if(dp[ind-1]!=-1) nonpick = dp[ind-1]; else{ dp[ind-1]=f(ind-1,v,dp); nonpick=dp[ind-1]; } return max(pick,nonpick); }