1005. 最大和

来源:互联网 发布:网络策划培训课程 编辑:程序博客网 时间:2024/05/21 22:28


Description
从数列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.

题解:动态规划。每引入第i个数时,存在不包含第i-1个数的最大和hi,
包含第i-1个数的最大和fi,其中hi可以和第i个数相加。

class Solution {public:    int maxSum(vector<int>& A) {        if (A.size() == 0) return 0;         int fi = A[0], hi = 0;        for (int i=1; i<A.size(); i++) {              int temp = hi + A[i];               hi = max(hi, fi);               fi = temp ;        }        return max(hi, fi);     }};