链接:
题意
有n个数字,不能选取相邻的数字,求最终选取的最大和
解:
经典DP,由于每个数字有拿与不拿两种状态,所以DP[I]刚好使用一个max
拿,则DP[I-1]不能拿,为DP[I-2]+nums[i]
不拿,则DP[i-1]可以拿,为DP[i-1]
两者取max
实际代码:
c++
#include<bits/stdc++.h>
using namespace std;
int rob(vector<int>& nums)
{
int lg=nums.size();
if(lg==1) return nums[0];
vector<int>dp(lg);
dp[0]=nums[0];dp[1]=max(nums[0],nums[1]);
for(int i=2;i<lg;i++)
{
dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
}
return dp[lg-1];
}
限制:
1 <= nums.length <= 100
0 <= nums[i] <= 400