Leetcode每日一题:198.house-robber(打家劫舍)

在这里插入图片描述
思路:明显的动态规划用money[i]存放打劫至第i家时得到的最多的金额,那么money[i]=max(money[i-2]+nums[i] ,money[i-1]) 因为不能打劫邻居

或者说money[i]代表打劫至第i家时的最佳方案(即最高金额);
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
int rob(vector<int> &nums)
    {
        int len = nums.size();
        if (len == 0)
        {
            return 0;
        }
        if (len == 1)
        {
            return nums[0];
            /* code */
        }
        if (len == 2)
        {
            return nums[0] > nums[1] ? nums[0] : nums[1];
        }

        vector<int> money(len, 0);
        //前两个初始化
        money[0] = nums[0];
        money[1] = nums[0] > nums[1] ? nums[0] : nums[1];

        for (int i = 2; i < len; i++)
        {
            if (money[i - 2] + nums[i] > money[i-1]) //动态规划最优解方程
            {
                money[i] = money[i - 2] + nums[i];
            }
            else
            {
                money[i]=money[i-1];
            }
            
        }
        return money[len - 1];
    }
};

猜你喜欢

转载自blog.csdn.net/wyll19980812/article/details/108437605