不相鄰子序列最大和

maximum sum non adjacent elements


  • 問題描述:
    給定一個數組,找出一個子序列,使得該子序列元素都不相鄰,且和最大。
    如:[4,1,1,4,2,1]的最大值爲9。

代碼:

#include <stdio.h>
#include <vector>

using namespace std;

int MSNAE(vector<int>& nums) {

    int len = nums.size();
    if (len==0) {
        return 0;
    }

    int incl = nums[0];      //incl表示當可以包含nums[i]時,前i個元素所能達到的最大值;初始化爲第一個元素
    int excl = 0;            //excl表示不包含第nums[i]時,前i個元素所能達到的最大值;初始化爲0;
    for (int i=1; i<len; i++) {
        int temp = incl;
        incl = max(excl+nums[i], incl); //更新incl;1.不包含前一個元素,包括本元素(excl+nums[i]);2. 不包括本元素(incl)的較大值
        excl = temp;      //excl跟新爲可能包括前一個元素的值(一定不包括i所指元素)
    }

    return incl;
}

int main(int argc, const char * argv[]) {

    vector<int> test = {4,1,1,4,2,1};
    int ans = MSNAE(test);
    printf("%d\n", ans);

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章