LeetCode 198. House Robber

来源:互联网 发布:软件可否申请专利 编辑:程序博客网 时间:2024/06/05 03:21

描述

给出一个数组,求出一组子集,该子集中各个元素不相邻,求和最大的子集

解决

动态规划,定义res[i]: 表示前i个数构成的最大子集和,状态转移方程:res[i] = max(res[i - 2] + nums[i], res[i - 1]);


class Solution {public:    int rob(vector<int>& nums) {        int length = nums.size();        if (length == 0)            return 0;        else if (length == 1)            return nums[0];        else if (length == 2)            return max(nums[0], nums[1]);        vector<int> res(length);        res[0] = nums[0], res[1] = max(nums[1], nums[0]);        for (int i = 2; i < length; ++i)        {            res[i] = max(res[i - 2] + nums[i], res[i - 1]);        }        return res[length - 1];    }};
0 0