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(线段树)

素数长度的所有连续子数组的最大和