LeetCode231打家劫社Ⅱ(動態規劃)

題目鏈接leetcode213

在這裏插入圖片描述
思路:在之前的基礎上加上環的約束,可以特判第一個選與不選,最後把兩個方向的最終狀態取個最大返回。

class Solution {
public:
    int rob(vector<int>& nums) {
        int n=nums.size();
        if(n==0) return 0;
        if(n==1) return nums[0];
        int dp1[n+1]={0}, dp2[n+1]={0}; //偷第一個和不偷第一個
        dp1[1] = nums[0];
        for(int i=2; i<n; ++i) dp1[i]=max(dp1[i-2]+nums[i-1], dp1[i-1]);
        dp2[1] = 0;
        for(int i=2; i<=n; ++i) dp2[i]=max(dp2[i-2]+nums[i-1], dp2[i-1]);
        return max(dp1[n-1], dp2[n]);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章