题目:
动态规划,记dp[i][0]表示不选择nums[i]的最大值,dp[i][1]表示选择nums[i]的最大值,那么有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <vector> using std::vector;
class Solution { public: int rob(vector<int> &nums) { int i, n = nums.size();
if (n == 1) { return nums[0]; } vector<vector<int> > dp(n, vector<int>(2, 0)); dp[0] = { 0, nums[0] }; for (i = 1; i < n; i++) { dp[i][0] = std::max(dp[i - 1][1], dp[i - 1][0]); dp[i][1] = dp[i - 1][0] + nums[i]; } return std::max(dp[n-1][0], dp[n-1][1]); } }; int main(){ Solution S; vector<int> nums = {1,2,3,1}; S.rob(nums); }
|