Maximum Sum Increasing Subsequence using DP in C++ program


In this problem, we are given an array arr[] of size n. Our task is to create a program to find the maximum Sum Increasing Subsequence using DP in C++.

Problem Description − To find the maximum sum increasing subsequence, we will be creating a subsequence in which the next element is greater than the current element.

Let’s take an example to understand the problem,

Input

arr[] = {4, 2, 3, 6, 5, 9}

Output

20

Explanation

Increasing subsequence with maximum sum:
{2, 3, 6, 9} = 2 + 3 + 6 + 9 = 20

Solution Approach

To solve the problem using a dynamic Program Approach. We will create an array to store the maximum sum until the current element. Then return the maxSum from the array.

Example

Program to illustrate the working of our solution,

 Live Demo

#include <iostream>
using namespace std;
int retMaxVal(int x, int y){
   if(x > y)
   return x;
   return y;
}
int calcMaxSubSeqSum(int arr[], int n) {
   int maxSum = 0;
   int sumDP[n];
   for (int i = 0; i < n; i++ )
   sumDP[i] = arr[i];
   for (int i = 1; i < n; i++ )
   for (int j = 0; j < i; j++ )
   if ( (sumDP[i] < (sumDP[j] + arr[i])) && ( arr[i] >
   arr[j] ) )
   sumDP[i] = sumDP[j] + arr[i];
   for (int i = 0; i < n; i++ )
   maxSum = retMaxVal(sumDP[i], maxSum);
   return maxSum;
}
int main() {
   int arr[] = {4, 2, 3, 6, 5, 9};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"The maximum Sum Increasing Subsequence using DP is
   "<<calcMaxSubSeqSum(arr, n);
   return 0;
}

Output

Sum of maximum sum increasing subsequence is 20

Updated on: 09-Dec-2020

151 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements