sundeepblue
5/3/2014 - 3:14 PM

[dp] [array] maximum sum of non-contiguous subsequences

[dp] [array] maximum sum of non-contiguous subsequences

// a better version
int max_sum_non_contigious_subsequence(int A[], int N) {
    if(N == 1) return A[0];
    if(N == 2) return max(A[0], A[1]);
    int *dp = new int[N];
    dp[0] = A[0];
    dp[1] = max(A[0], A[1]);
    
    for(int i=2; i<N; i++) {
        dp[i] = max(dp[i-1], dp[i-2]+A[i]);    
    }
    return dp[N-1];
}

int get_max_non_continuous_subsequence(int *A, int N) {
        int inclu = A[0], exclu = 0;
        for(int i=1; i<N; i++) {
                int new_exclu = max(exclu, inclu);
                int new_inclu = exclu + A[i];
                inclu = new_inclu;
                exclu = new_exclu;
        }
        int re = max(inclu, exclu);
        return re >= 0 ? re : -1;
}

int main()
{
   int A[] = {1,2,3,-1,3,4,2,7,8,-2,9,4,4,5};
   cout << max_sum_non_contigious_subsequence(A, 14) << endl;
   cout << get_max_non_continuous_subsequence(A, 14) << endl;
}