最大不相邻子序列和

不相邻最大子序列和

http://www.nowcoder.com/questionTerminal/269b4dbd74e540aabd3aa9438208ed8d


看到这题,很容易观察到这是一个包含子问题的,直接dp。

题目要求是不相邻的子序列值。 什么样子会帮助满足最大呢?
1,序列包含尽可能多的数
2,序列包含尽可能大的数。
考虑不相邻的话,要不要加入第i个数,需要考虑的问题是它前一个i-1 要不要加入,至于i-2则不需要考虑,因为加入第i个数必然可以加入不相邻的i-2 。换句话说,你不会跳过3个数。
换成代码就是 dp[i+3] = max(dp[i+2], dp[i+1]+arr[i])

class Solution {
public:
    long long subsequence(int n, vector<int>& array) {
        // write code 
        long long dp1=0,dp2=0;
        for(auto& it : array) {
            long long dp3= max(dp1+it,dp2);
            dp1 = dp2;
            dp2 = dp3;
        }
        return dp2;
    }
};
全部评论

相关推荐

4 收藏 评论
分享
牛客网
牛客企业服务