# Find maximum Subsequence Sum according to given conditions

Given an integer array nums and an integer K, The task is to find the maximum sum of a non-empty subsequence of the array such that for every two consecutive integers in the subsequence, nums[i] and nums[j], where i < j, the condition j – i <= K is satisfied.

A subsequence of an array is obtained by deleting some number of elements (can be zero) from the array, leaving the remaining elements in their original order.

Examples:

```Input: nums = [10, 2, -10, 5, 20], K = 2
Output: 37
Explanation:
The subsequence is [10, 2, 5, 20].

Input: nums = [-1, -2, -3], K = 1
Output: -1

Input: nums = [10, -2, -10, -5, 20], K = 2
Output: 23
```

Aprroach:

• The optimal solution of this problem can be achieved by using the Sliding Window Maximum .
• For every index, check what is the maximum value that can be obtained from a window of size K before it. If the maximum value is negative, use zero instead.

 `// C++ program to find the maximum sum  ` `// subsequence under given constraint ` `#include ` `using` `namespace` `std; ` ` `  `// Function return the maximum sum  ` `int` `ConstrainedSubsetSum(vector<``int``>& nums, ` `                         ``int` `k) ` `{ ` `    ``deque > d; ` `     `  `    ``// Iterating the given array ` `    ``for` `(``int` `i = 0; i < nums.size(); i++) ` `    ``{ ` `        ``// Check if deque is empty ` `        ``nums[i] += d.size() ` `            ``? max(d.back().first, 0) : 0; ` `         `  `        ``while` `(d.size() && ` `               ``d.front().first < nums[i]) ` `            ``d.pop_front(); ` `         `  `        ``d.push_front({ nums[i], i }); ` `         `  `        ``if` `(d.back().second == i - k) ` `            ``d.pop_back(); ` `    ``} ` ` `  `    ``int` `ans = nums; ` `     `  `    ``for` `(``auto` `x : nums) ` `        ``ans = max(ans, x); ` ` `  `    ``return` `ans; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``vector<``int``> nums = { 10, -2, -10,  ` `                        ``-5, 20 }; ` `    ``int` `K = 2; ` `     `  `    ``// Function call ` `    ``cout << ConstrainedSubsetSum(nums, K)  ` `        ``<< endl; ` `    ``return` `0; ` `} `

Output:

```23
```

Time Complexity: O(N)
Space Complexity: O(K)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.