题目描述
思路
动态规划,dp[n]表示序列长度为n的最大实长。
状态转移方程为:dp[n] = max(dp[n-2] + nums[n-1], dp[n-1]) n >= 2;
也就是根据是否选择最后一个划分为两种情况,取两种情况的最大值即可。
代码
class Solution {
public:
int massage(vector<int>& nums) {
int n = nums.size();
if(n == 0)
return 0;
if(n == 1)
return nums[0];
vector<int> dp(n+1, 0);
dp[0] = 0;
dp[1] = nums[0];
for(int i = 2; i <= n; i++)
{
dp[i] = max(dp[i-2] + nums[i-1],dp[i - 1]);
}
return dp[n];
}
};