Eggs dropping puzzle | Set 2
Given N eggs and K floors, the task is to find the minimum number of trials needed, in the worst case, to find the floor below which all floors are safe. A floor is safe if dropping an egg from it does not break the egg. Please refer n eggs and k floors for more insight.
Examples:
Input: N = 2, K = 10
Output: 4
Explanation:
The first trial was on the 4th floor. Two cases arise after this:
- If the egg breaks, we have one egg left, so we need three more trials.
- If the egg does not break, the next try is from the 7th floor. Again, two cases arise.
Input: N = 2, K = 100
Output: 14
Prerequisites: Egg Dropping Puzzle
Approach: Consider this problem in a different way:
Let dp[x][n] is the maximum number of floors that can be checked with given n eggs and x moves.
Then the equation is:
- If the egg breaks, then we can check dp[x – 1][n – 1] floors.
- If the egg doesn’t break, then we can check dp[x – 1][n] + 1 floors.
Since we need to cover k floors, dp[x][n] >= k.
dp[x][n] is similar to the number of combinations and it increases exponentially to k
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the minimum number // of trials needed in the worst case // with n eggs and k floors int eggDrop( int n, int k) { vector<vector< int > > dp(k + 1, vector< int >(n + 1, 0)); int x = 0; // Fill all the entries in table using // optimal substructure property while (dp[x][n] < k) { x++; for ( int i = 1; i <= n; i++) dp[x][i] = dp[x - 1][i - 1] + dp[x - 1][i] + 1; } // Return the minimum number of moves return x; } // Driver code int main() { int n = 2, k = 36; cout << eggDrop(n, k); return 0; } |
Java
// Java implementation of the approach class GFG { // Function to return the minimum number // of trials needed in the worst case // with n eggs and k floors static int eggDrop( int n, int k) { int dp[][] = new int [k + 1 ][n + 1 ]; int x = 0 ; // Fill all the entries in table using // optimal substructure property while (dp[x][n] < k) { x++; for ( int i = 1 ; i <= n; i++) dp[x][i] = dp[x - 1 ][i - 1 ] + dp[x - 1 ][i] + 1 ; } // Return the minimum number of moves return x; } // Driver code public static void main(String args[]) { int n = 2 , k = 36 ; System.out.println( eggDrop(n, k)); } } // This code is contributed by Arnab Kundu |
Python3
# Python implementation of the approach # Function to return the minimum number # of trials needed in the worst case # with n eggs and k floors def eggDrop(n, k): dp = [[ 0 for i in range (n + 1 )] for j in range (k + 1 )] x = 0 ; # Fill all the entries in table using # optimal substructure property while (dp[x][n] < k): x + = 1 ; for i in range ( 1 , n + 1 ): dp[x][i] = dp[x - 1 ][i - 1 ] + \ dp[x - 1 ][i] + 1 ; # Return the minimum number of moves return x; # Driver code if __name__ = = '__main__' : n = 2 ; k = 36 ; print (eggDrop(n, k)); # This code is contributed by PrinciRaj1992 |
C#
// C# implementation of the approach using System; class GFG { // Function to return the minimum number // of trials needed in the worst case // with n eggs and k floors static int eggDrop( int n, int k) { int [,]dp = new int [k + 1, n + 1]; int x = 0; // Fill all the entries in table using // optimal substructure property while (dp[x, n] < k) { x++; for ( int i = 1; i <= n; i++) dp[x, i] = dp[x - 1, i - 1] + dp[x - 1, i] + 1; } // Return the minimum number of moves return x; } // Driver code public static void Main(String []args) { int n = 2, k = 36; Console.WriteLine(eggDrop(n, k)); } } // This code is contributed by PrinciRaj1992 |
Javascript
<script> // Javascript implementation of the approach // Function to return the minimum number // of trials needed in the worst case // with n eggs and k floors function eggDrop(n, k) { let dp = new Array(); for (let i = 0; i < k + 1; i++){ dp.push( new Array(n + 1).fill(0)) } let x = 0; // Fill all the entries in table using // optimal substructure property while (dp[x][n] < k) { x++; for (let i = 1; i <= n; i++) dp[x][i] = dp[x - 1][i - 1] + dp[x - 1][i] + 1; } // Return the minimum number of moves return x; } // Driver code let n = 2, k = 36; document.write(eggDrop(n, k)); </script> |
8
Time Complexity: O(N * K)
Space Complexity: O(N * K)
Please Login to comment...