leetcode198-打家劫舍

动态规划:

Si:偷前i间房能获得的最大金额
Hi:第i间房的价值
每到一间房按偷或者不偷两种情况考虑:
偷:Sn-2+Hn(前n-2间房能够偷到最大价值+本间房的价值)
不偷:Sn-1
在这里插入图片描述

int rob(vector<int>& nums) {
    int n = nums.size();
    if (n == 0) return 0;
    if (n == 1) return nums[0];

    vector<int>state(n, 0); //用于储存Si
    state[0] = nums[0];     //第一个房子
    state[1] = max(nums[0], nums[1]);  //第二个房子
    for (int i = 2; i < n; i++) 
        state[i] = max(state[i - 1], state[i - 2] + nums[i]);
    return state[n-1];
}

猜你喜欢

转载自blog.csdn.net/Caiyii530/article/details/106533463
今日推荐