Maximum subsequence sum such that no three are consecutive in C++ Program

C++Server Side ProgrammingProgramming

In this problem, we are given an array arr[] consisting of n positive integers. Our task is to create a program to find the maximum subsequence sum such that no three are consecutive.

Problem Description − Here, we need to find the sum of sequences created from the array such that there are no three consecutive elements.

Consecutive elements of an array are those elements that have followed the same order of index.

arr[0], arr[1], arr[2], …

Let’s take an example to understand the problem,

Input

arr[] = {5, 9, 12, 15}

Output

32

Explanation

Sum = 5 + 12 + 15 = 32

Solution Approach

A simple solution to the problem is by creating an auxiliary array to store the sum until the current index. And then find the sum and check the sum till the index by checking for consecutive sums.

For the first two sum values,
sumVal[0] = arr[0]
sumVal[1] = arr[0] + arr[1]

Then the third value to be considered cannot be directly considered. And for considering the sum, we will check for the conditions with the current three,If considering arr[i], increases the sum value, exclude arr[i−1] or arr[i−2].Else do not consider arr[i], the sum remains the same.

sum[i] = max(sum[i−3] + arr[i−1] + arr[i], sum[i−2] + arr[i], sum[i−1])

Example

Program to show the implementation of our solution,

 Live Demo

#include <iostream>
using namespace std;
int findMaxSubSeqSum(int arr[], int n) {
   int maxSumArr[n];
   maxSumArr[0] = arr[0];
   maxSumArr[1] = arr[0] + arr[1];
   maxSumArr[2] = max(maxSumArr[1], max(arr[1] + arr[2], arr[0] +
   arr[2]));
   for (int i = 3; i < n; i++){
      int sum1 = maxSumArr[i − 2] + arr[i];
      int sum2 = arr[i] + arr[i − 1] + maxSumArr[i − 3];
      maxSumArr[i] = max(max(maxSumArr[i − 1], sum1), sum2);
   }
   return maxSumArr[n − 1];
}
int main() {
   int arr[] = { 5, 9, 12, 15 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum subsequence sum such that no three are
   consecutive is "<<findMaxSubSeqSum(arr, n);
   return 0;
}

Output

The maximum subsequence sum such that no three are consecutive is 32
raja
Published on 09-Dec-2020 17:24:51
Advertisements