Given an array of positive integers arr and a sum x, find all unique combinations in arr where the sum is equal to x. The same repeated number may be chosen from arr unlimited number of times. Elements in a combination (a1, a2, …, ak) must be printed in non-descending order. (ie, a1 <= a2 <= … <= ak).
The combinations themselves must be sorted in ascending order, i.e., the combination with smallest first element should be printed first. If there is no combination possible the print "Empty" (without quotes).
Input : arr = 2, 4, 6, 8 x = 8 Output : [2, 2, 2, 2] [2, 2, 4] [2, 6] [4, 4] 
Since the problem is to get all the possible results, not the best or the number of result, thus we don’t need to consider DP(dynamic programming), recursion is needed to handle it.
We should use the following algorithm.
1. Sort the array(non-decreasing). 2. First remove all the duplicates from array. 3. Then use recursion and backtracking to solve the problem. (A) If at any time sub-problem sum == 0 then add that array to the result (vector of vectors). (B) Else if sum if negative then ignore that sub-problem. (C) Else insert the present array in that index to the current vector and call the function with sum = sum-ar[index] and index = index, then pop that element from current index (backtrack) and call the function with sum = sum and index = index+1
Below is C++ implementation of above steps.
( 2 2 2 2 ) ( 2 2 4 ) ( 2 6 ) ( 4 4 ) ( 8 )
This article is contributed by Aditya Nihal Kumar Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
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.
- Count of n digit numbers whose sum of digits equals to given sum
- Finding sum of digits of a number until sum becomes single digit
- Perfect Sum Problem (Print all subsets with given sum)
- Subset Sum Problem in O(sum) space
- Smallest number with given sum of digits and sum of square of digits
- Count of possible arrays from prefix-sum and suffix-sum arrays
- Find maximum subset sum formed by partitioning any subset of array into 2 partitions with equal sum
- Sum of sum-series of first N Natural numbers
- Sum of series formed by difference between product and sum of N natural numbers
- Maximize sum of remaining elements after every removal of the array half with greater sum
- Find an element in array such that sum of left array is equal to sum of right array
- Program for Sum of the digits of a given number
- Given an array A and a number x, check for pair in A with sum as x
- Largest Sum Contiguous Subarray
- Maximum sum such that no two elements are adjacent
- Two elements whose sum is closest to zero
- Check for Children Sum Property in a Binary Tree
- Root to leaf path sum equal to a given number
- Subset Sum | Backtracking-4
- Convert a given tree to its Sum Tree