kaki-epithesi@home:~$

30 Days of Code [Day 29]

QUESTION : 198. House Robber

#define vi vector<int>
#define pii pair<int, int>
#define pb push_back
#define mp make_pair
#define all(v) v.begin(), v.end()
#define fo(i,s,n) for(int i=s;i<n;++i)
#define of(i,s,n) for(int i=s-1;i>=n;--i)
#define fv(V) for( auto &it : V )
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
class Solution {
public:
    int rob(vector<int>& nums) {
        fastio;
        int n = nums.size();
        if(n <= 3)
            if(n == 1) return nums[0];
            else if(n == 2) return max(nums[0], nums[1]);
            else return max(nums[0]+ nums[2], nums[1]);
        vi dp(n, 0);
        dp[0] = nums[0];
        dp[1] = max(nums[0],nums[1]);
        dp[2] = nums[0] + nums[2];
        fo(i,3,n){
            dp[i] = max(dp[i-2], dp[i-3]) + nums[i];
        }
        return max(dp[n-1], dp[n-2]);
        
    }
};