198 House Robber

来源:互联网 发布:c语言百分d是什么意思 编辑:程序博客网 时间:2024/06/16 20:52

题意:给定非负数的一维数组,从中选出不相邻的一组数,使这组数之和最大。

分析:动态规划,设dp[i]表示nums[0,i]所选数组的最大和,状态转移方程为

                      dp[i]=max(dp[i-1],dp[i-2]+nums[i]);

代码:

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


0 0