


You have to move each ninja of given strength from the given list into two separate teams (list) ‘Team_A’ and ‘Team_B’ such that the average strengths of ‘Team_A’ == ‘Team_B’. There has to be at least one member in each team since they cannot play the game without that.
Input : [1, 7, 15, 29, 11, 9]
Output : [9, 15] [1, 7, 11, 29]
Explanation: The average strengths of both the teams is 12
The first line of input contains a single integer ‘N’ denoting the number of ninjas, whose list of strengths which would be given in the list.
The second line contains ‘N’ single space-separated integers, denoting the strengths of the ninjas.
Print "True" if the ninjas can be regrouped into two different teams having same average strengths and "False" is they cannot be regrouped.
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= N <= 30
0 <= strengths[i] <= 10^4
Time Limit: 1 sec
The idea here is that for each element you have 2 options (like in a Knapsack problem), select the ninja member in B or A. The sum of strengths of ninjas in team B is the sum of numbers in B and n is the number of elements in B. The states can’t be uniquely classified by just ‘i’ and sum because you can obtain the same sum value by selecting a different number of elements, which will affect the average.
Assume we split the total ninjas (let list (array) ‘strengths’ denote the list of strengths of the total ninjas given to us) into ‘A’ and ‘B’ so that avg(A) == avg(B).
Notice a fact that in this problem we have: avg(strengths) == avg(A) == avg(B)
So we only need to find a proper subset B such that avg(B) == avg(strengths) and we can just put the remaining elements in A.
Now if avg(B)==avg(strengths), that means sum(B) / B.length == sum(strengths) / N
or, sum(B) == sum(strenghts) * B.length / N
That means we need to find a subset B, such that its sum and length satisfies this condition.
The algorithm will be: