Given a weighting scale and an array of different positive weights where we have an infinite supply of each weight. Our task is to put weights on left and right pans of scale one by one in such a way that pans move to that side where weight is put i.e. each time, pans of scale moves to alternate sides.
- We are given another integer ‘steps’, times which we need to perform this operation.
- Another constraint is that we can’t put same weight consecutively i.e. if weight w is taken then in next step while putting the weight on opposite pan we can’t take w again.
Let weight array is [7, 11] and steps = 3 then 7, 11, 7 is the sequence in which weights should be kept in order to move scale alternatively. Let another weight array is [2, 3, 5, 6] and steps = 10 then, 3, 2, 3, 5, 6, 5, 3, 2, 3 is the sequence in which weights should be kept in order to move scale alternatively.
This problem can be solved by doing DFS among scale states.
- We traverse among various DFS states for the solution where each DFS state will correspond to actual difference value between left and right pans and current step count.
- Instead of storing weights of both pans, we just store the difference residue value and each time chosen weight value should be greater than this difference and shouldn’t be equal to previously chosen value of weight.
- If it is, then we call the DFS method recursively with new difference value and one more step.
Please see below code for better understanding,
2 3 2 3 5 6 5 3 2 3
This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. 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.
- Minimum steps to reach end of array under constraints
- Barabasi Albert Graph (for Scale Free Models)
- Check loop in array according to given constraints
- Count of elements which form a loop in an Array according to given constraints
- Check if alternate path exists from U to V with smaller individual weight in a given Graph
- Find the minimum number of moves needed to move from one cell of matrix to another
- Check if the given array can be constructed uniquely from the given set of subsequences
- Check whether a given graph is Bipartite or not
- Given a sorted dictionary of an alien language, find order of characters
- Given a matrix of ‘O’ and ‘X’, replace 'O' with 'X' if surrounded by 'X'
- Minimize Cash Flow among a given set of friends who have borrowed money from each other
- Print all paths from a given source to a destination
- Optimal read list for given number of days
- Print all Jumping Numbers smaller than or equal to a given value
- Check whether given degrees of vertices represent a Graph or Tree
- Find all reachable nodes from every node present in a given set
- Check if removing a given edge disconnects a graph
- Check if a given directed graph is strongly connected | Set 2 (Kosaraju using BFS)
- Check if a given graph is tree or not
- Print all paths from a given source to a destination using BFS