You are viewing a single comment's thread. Return to all comments →
Can you please explain your program? It would be of great help.
here, we have to equalize the number of chocolates that each person has. I have categorized the solution into four steps -
1> first thing you have to understand is that giving some chocolates to everyone except one is same as taking away chocolates from one of them. for example -
Out of 4 people in a competition,3 gets selected for next round --> 1 person loses.
Out of 4 people in a competition, 1 person loses --> 3 gets selected for next round.
2> Using the set of numbers which are given in the question (1,2,5), we can reduce any given value(say 201) to any desired value(say 0,10,37,99....upto 200).So, logically, we would want to reduce the rest of the numbers in the array to the minimum value in it and calculate the number of steps.
3>Now,we require the minimum number of steps, so for every element in array,first we will find the difference between the minimum value in array with the current element and divide it by 5(start with largest number in the set to smallest), then the remainder is divided by 2 and then by 1 and count the number of steps.
2 2 3 7 --> 2 2 2 7 --> 2 2 2 2 (2 steps)
4>But, here comes the tricky part. lets say the input is -
3 6 6.
Based on our logic,
3 6 6 --> 3 4 6 --> 3 3 6 --> 3 3 4 --> 3 3 3 (4 steps)
but, there is another minimal way
3 6 6 --> 1 6 6 --> 1 1 6 --> 1 1 1 (3 steps)
So, we will have to check for all the values (min,min-1,min-2,min-3 and min-4) to find out the best possible solution out of all the options.
Hope it helps!
Best possible solution can be found from (min,min-1,min-2). I think we don't need to check for (min-3) and (min-4). I have submitted by calculating optimal from (min,min-1,min-2). Can you provide an example where min-3 or min-4 is more optimal ?
My code :
using namespace std;
left=arr[i]-mn; // for (min)
left=arr[i]-(mn-1); // for (min-1)
left=arr[i]-(mn-2); // for (min-2)
op1=min(op1,op2); // optimal from min-1 and min-2
cout<<min(op1,op3)<<endl; // Most Optimal
generally, in dp solution..we start with 1 and build up our solution till n..but i think here (min,min-1,min-2) will do. how did you conclude that we dont require min-3,min-4. Can you elaborate
There is no need to go till min-3 or min-4. Solution passes all test case with just min, min-1, min-2. Makes sense too, logically. Taking min-1 as baseline is helpful for numbers that are min+4 as they can reach min-1 in 1 step (-5). They couldn't reach min or min-2 in 1 one step.
Similarily, Taking min-2 as baseline is helpful for numbers that are min+3 as they can reach min-2 in 1 step (-5). They would have to take 2 steps in reaching min or min-1.
Taking min-3 as baseline is not helpful for any numbers. min+1 number take 2 steps in reaching there. min+2 number takes one step in reaching (-5) but they could have easily reached min in one step too (-2) . min+3 number take 2 steps in reaching min-3 and 2 steps in reaching min again so we don't really need min-3.
Same logic can be applied for min-4 baseline too.
(min,min-1,min-2,min-3andmin-4) this step i didnt understand.why ?ididnt get it.please if you could explain.Yhanks in advance