1005. 最大和
从数列A[0], A[1], A[2], ..., A[N-1]中选若干个数,要求相邻的数不能都选,也就是说如果选了A[i], 就不能选A[i-1]和A[i+1]. 求能选出的最大和.
1 <= N <= 100000, 1 <= A[i] <= 1000
请为下面的Solution类实现解决上述问题的函数maxSum,函数参数A是给出的数列,返回值为所求的最大和.
class Solution {
public:
int maxSum(vector<int>& A) {
}
};
例1:A = {2, 5, 2},答案为5.
例2:A = {2, 5, 4},答案为6.
注意:你只需要提交Solution类的代码,你在本地可以编写main函数测试程序,但不需要提交main函数的代码. 注意不要修改类和函数的名称.
class Solution {
public:
int maxSum(vector<int>& A) {
int n = A.size();
int res = 0;
vector<int> dp (n);
if(n == 0) return 0;
if(n == 1) return A[0];
if(n == 2) return max(A[0],A[1]);
if(n == 3) return max(A[1],A[0]+A[2]);
for( int i = 3; i < n ;i ++){
dp[0] = A[0];
dp[1] = max(A[0],A[1]);
dp[2] = max(A[1],A[0]+A[2]);
dp[i] = max ( (A[i]+dp[i-2]) , (A[i]+dp[i-3]));
}
for(int i = 0 ; i <n ; i ++){
if(res <dp[i]){
res = dp[i];
}
}
return res ;
}
};