从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求相邻的数不能都选,也就是说如果选了A[i], 就不能选A[i-1]和A[i+1]. 求能选出的最大和.
1 <= N <= 100000, 1 <= A[i] <= 1000
例1:A = {2, 5, 2},答案为5.
例2:A = {2, 5, 4},答案为6.
思路:
动态规划
class Solution {
public:
int maxSum(vector<int>& A) {
int n = A.size();
if (0 == n) return 0;
vector<int> F;
F.resize(n);
F[0] = A[0];
//F[1] = A[1];
F[1] = max(F[0], A[1]);
for (int i = 2; i < n; i++) {
if (F[i-1] == F[i-2])
F[i] = F[i-2] + A[i];
else
F[i] = max(F[i-1], F[i-2]+A[i]);
}
return max(F[n], F[n-1]);
}
};