# Maximum Sum Increasing Subsequence

Data StructureDynamic ProgrammingAlgorithms

Maximum Sum Increasing subsequence is a subsequence of a given list of integers, whose sum is maximum and in the subsequence, all elements are sorted in increasing order.

Let there is an array to store max sum increasing subsequence, such that L[i] is the max sum increasing subsequence, which is ending with array[i].

## Input and Output

Input:
Sequence of integers. {3, 2, 6, 4, 5, 1}
Output:
Increasing subsequence whose sum is maximum. {3, 4, 5}.

## Algorithm

maxSumSubSeq(array, n)

Input: The sequence of numbers, number of elements.

Output: Maximum sum of the increasing sub sequence.

Begin
define array of arrays named subSeqLen of size n.
for i in  range (1 to n-1), do
for j in range (0 to i-1), do
if arr[i] > arr[j] and sum of subSeqLen [i] < sum of subSeqLen [j], then
subSeqLen[i] := subSeqLen[j]
done
done

res := subSeqLen

for all values of subSeqLen, do
if sum of subSeqLen[i] > sum of subSeqLen[res], then
res := subSeqLen[i]
done

print the values of res.

End

## Example

#include <iostream>
#include <vector>
using namespace std;

int findAllSum(vector<int> arr) {    //find sum of all vector elements
int sum = 0;

for(int i = 0; i<arr.size(); i++) {
sum += arr[i];
}

return sum;
}

void maxSumSubSeq(int arr[], int n) {
vector <vector<int> > subSeqLen(n);    //max sum increasing subsequence ending with arr[i]
subSeqLen.push_back(arr);

for (int i = 1; i < n; i++) {         //from index 1 to all
for (int j = 0; j < i; j++) {     //for all j, j<i

if ((arr[i] > arr[j]) && (findAllSum(subSeqLen[i]) < findAllSum(subSeqLen[j])))
subSeqLen[i] = subSeqLen[j];
}

subSeqLen[i].push_back(arr[i]);    //sub Sequence ends with arr[i]
}

vector<int> res = subSeqLen;

for(int i = 0; i<subSeqLen.size(); i++) {
if (findAllSum(subSeqLen[i]) > findAllSum(res))
res = subSeqLen[i];
}

for(int i = 0; i<res.size(); i++)
cout << res[i] << " ";
cout << endl;
}

int main() {
int arr[] = { 3, 2, 6, 4, 5, 1 };
int n = 6;
cout << "The Maximum Sum Subsequence is: ";
maxSumSubSeq(arr, n);
}

## Output

The Maximum Sum Subsequence is: 3 4 5