c_cpp 非连续子序列的最大总和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 非连续子序列的最大总和相关的知识,希望对你有一定的参考价值。
// solution 1, iterative version
int get_sum(int A[], int N) {
if(N == 0) return 0;
if(N == 1) return A[0];
int *S = new int[N];
S[0] = A[0];
S[1] = max(A[0], A[1]);
for(int i=2; i<N; i++)
S[i] = max(A[i], max(S[i-1], S[i-2] + A[i])); // gist!!! cannot forget A[i]
return S[N-1];
}
// solution 2, recursive version
int get_sum2(int A[], int i) {
if(i == 0) return 0;
if(i == 1) return A[0];
return max(get_sum2(A, i-1), A[i] + get_sum2(A, i-2));
}
int main()
{
int A[] = {5, 5, 10, 40, 50, 35};
cout << get_sum(A, 6) << endl;
cout << get_sum2(A, 6);
return 0;
}
以上是关于c_cpp 非连续子序列的最大总和的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 从正整数数组中找出子序列的最大总和,其中任意两个子序列彼此不相邻i
随机序列的最大连续子序列和的期望
c_cpp 对于给定序列a1,a2,a3 ...... an,寻找它的某个连续子段,使得其和最大。如(-2,11,-4,13,-5,-2)最大子段是{ 11,-4,13}其和为20.下述算法的时间复杂
最大连续子序列和
poj2750--Potted Flower(线段树)
素数长度的所有连续子数组的最大和