【Leetcode】198. House Robber
题目地址:
https://leetcode.com/problems/house-robber/description/
题目描述:
实际为从一组数中取出不相邻的数,使得他们的和最大。
解题思路:
动态规划,其实就是判断当前的数是否取舍,定一个数组dp,dp[i]表示第i个时能取得的
最大值,比较dp[i-1](不取当前数)和dp[i-2]+nums[i](取当前数)哪个大,即转移方程:
dp[i] = max(dp[i-1],dp[i-2] + nums[i])。注意需要初始化dp[0] = nums[0],dp[1] = max(nums[0],nums[1])
代码:
class Solution { public: int rob(vector<int>& nums) { size_t size = nums.size(); if (size == 0) { return 0; } if (size == 1) { return nums.at(0); } vector<int> dp(size); dp[0] = nums.at(0); dp[1] = max(nums.at(0), nums.at(1)); for (size_t i = 2; i < size; i++) { dp[i] = max(dp[i - 2] + nums.at(i), dp[i - 1]); } return dp[size - 1]; } };