# Split an Array A[] into Subsets having equal Sum and sizes equal to elements of Array B[]

• Last Updated : 23 Aug, 2020

Given an array A[] consisting of N integers, the task is to split the array A[] into subsets having equal sum and of length equal to elements in array B[].

Examples:

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input: A[] = {17, 13, 21, 20, 50, 29}, B[] = {2, 3, 1}
Output:
21 29
17 13 20
50

Input: A[] = { 1, 2, 3, 4, 5, 6}, B[] = { 2, 2, 2}
Output:
1 6
2 5
3 4

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Follow the steps below to solve the problem:

• Since the count of subsets is already given, calculate the sum of each subset.
• Traverse through each element of array B[], find each possible combination of length B[i] and check if the sum of the combination is equal to the desired sum or not.
• Repeat the above steps for every array element B[i] and print the final answer

Below is the implementation of the above approach:

## Python

 `# Python Program to implement``# the above approach``from` `itertools ``import` `combinations`` ` `# Function to split elements of first``# array into subsets of size given as``# elements in the second array``def` `main(A, B):`` ` `    ``# Required sum of subsets``    ``req_sum ``=` `sum``(A) ``/``/` `len``(B)`` ` `    ``# Stores the subsets``    ``final ``=` `[]`` ` `    ``# Iterate the array B[]``    ``for` `i ``in` `B:`` ` `        ``# Generate all possible``        ``# combination of length B[i]``        ``temp ``=` `list``(combinations(A, i))`` ` `    ``# Iterate over all the combinations``        ``for` `j ``in` `temp:`` ` `            ``# If the sum is equal to the ``            ``# required sum of subsets``            ``if``(``sum``(j) ``=``=` `req_sum):`` ` `                ``# Store the subset``                ``temp ``=` `list``(j)``                ``final.append(temp)`` ` `                ``for` `k ``in` `temp:`` ` `                    ``# Removing the subset``                    ``# from the array``                    ``A.remove(k)``                ``break`` ` `    ``# Printing the final result``    ``print``(final)`` ` ` ` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``# Value of array A and B``    ``A ``=` `[``1``, ``2``, ``3``, ``4``, ``5``, ``6``]``    ``B ``=` `[``2``, ``2``, ``2``]`` ` `    ``# Function call``    ``main(A, B)`
Output:
```[[1, 6], [2, 5], [3, 4]]
```

Time Complexity: O(N3)
Auxiliary Space: O(2maxm), where maxm is the maximum element in array B[]

My Personal Notes arrow_drop_up