Egg Dropping Puzzle

PROBLEM :

The following is a description of the instance of this famous puzzle involving n=2 eggs and a building with k=36 floors.

Suppose that we wish to know which stories in a 36-story building are safe to drop eggs from, and which will cause the eggs to break on landing. We make a few assumptions:

…..An egg that survives a fall can be used again.
…..A broken egg must be discarded.
…..The effect of a fall is the same for all eggs.
…..If an egg breaks when dropped, then it would break if dropped from a higher floor.
…..If an egg survives a fall then it would survive a shorter fall.
…..It is not ruled out that the first-floor windows break eggs, nor is it ruled out that the 36th-floor do not cause an egg to break.

In this problem you have to find minimum trials to solve for n eggs and k floors.
For more description on this problem (CLICK ON THIS LINK)

Input:
The first line contains an integer T, depicting total number of test cases.
Then following T lines contains 2 integers n and k.


Output:
Print the minimum trials required to solve the problem.


Constraints:
1<=T<=30
1<=n<=10
1<=k<=50


Example:
Input:
1
2 10

Output:
4

--------------------------------------------------------------------------------
SIMPLE c++ IMPLEMENTATION :
--------------------------------------------------------------------------------

#include<iostream>
using namespace std;
#include<limits.h>
int minimum_trials(int ,int ) ;
int max(int ,int ) ;
int main()
 {
int t,n,k,ans ;
cin>>t ;
while(t--)
{
   cin>>n>>k ;
   ans=minimum_trials(n,k) ;
   cout<<ans<<endl ;
}
return 0;
}

int minimum_trials(int egg,int Floor)
{
    int mat[egg+1][Floor+1]={0} ;
    int x,y,z,sum ;
   
    for(x=1;x<=Floor;x++)
        mat[1][x]=x ;
       
    for(y=1;y<=egg;y++)
        mat[y][1]=1 ;
       
    for(x=2;x<=egg;x++)
    {
        for(y=2;y<=Floor;y++)
        {
            mat[x][y]=INT_MAX ;
            for(z=1;z<=y;z++)
            {
                sum=1+max(mat[x-1][z-1],mat[x][y-z]) ;
                if(sum<mat[x][y])
                    mat[x][y]=sum ;
            }
        }
    }
 
    return mat[egg][Floor] ;
}

int max(int a,int b)
{
    if(a==b)
        return a ;
    return a>b?a:b ;
}

---------------------------------------------------------------------------------

Comments

Post a Comment