Egg Dropping Puzzle[DP][GFG]
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 see wiki page
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
Code:
#include<bits/stdc++.h>
#include<bits/stdc++.h>
using namespace std;
int eggdroping(int eggs,int floors)
{
int dp[eggs+1][floors+1];
int c=0;
for(int j=0;j<=floors;j++)
{
dp[1][j] = j;
}
for(int i=2;i<=eggs;i++)
{
for(int j=1;j<=floors;j++)
{
dp[i][j] = INT_MAX;
for(int k=1;k<=j;k++)
{
if(i>j)
{
dp[i][j] = dp[i-1][j];
}
else
{
c = 1 + max(dp[i-1][k-1] , dp[i][j-k]);
if(c < dp[i][j])
{
dp[i][j] = c;
}
}
}
}
}
/*for(int i=0;i<=eggs;i++)
{
for(int j=0;j<=floors;j++)
{
cout<<dp[i][j]<<" ";
}
cout<<endl;
}
*/
return dp[eggs][floors];
}
int main()
{
int t;
cin>>t;
while(t--){
int eggs,floors;
cin>>eggs>>floors;
cout<<eggdroping(eggs,floors)<<endl;
}
}
All test cases passed.

Leave a comment