diff --git a/Dynamic Programming/Egg-Dropping-Puzzle.cpp b/Dynamic Programming/Egg-Dropping-Puzzle.cpp new file mode 100644 index 000000000..5b277be26 --- /dev/null +++ b/Dynamic Programming/Egg-Dropping-Puzzle.cpp @@ -0,0 +1,45 @@ +/* Function to get minimun number of trials needed + * in worst case with n eggs and k floors + */ + +#include +#include +using namespace std; + +int eggDrop(int n, int k) { + int eggFloor[n+1][k+1]; + int result; + + for(int i=1; i<=n; i++) { + eggFloor[i][1] = 1; //n eggs..1 Floor + eggFloor[i][0] = 0; //n eggs..0 Floor + } + + // Only one egg available + for(int j=1; j<=k ; j++) { + eggFloor[1][j] = j; + } + + for(int i=2; i<=n; i++) { + for(int j=2; j<=k; j++) { + eggFloor[i][j] = INT_MAX; + for(int x=1; x<=j; x++) { + // 1+max(eggBreak[one less egg, lower floors], + // eggDoesntBreak[same # of eggs, upper floors]); + result = 1 + max(eggFloor[i-1][x-1], eggFloor[i][j-x]); + if(result < eggFloor[i][j]) + eggFloor[i][j] = result; + } + } + } + + return eggFloor[n][k]; +} + +int main() { + int n, k; + cout << "Enter number of eggs and floors: "; + cin>>n>>k; + cout << "Minimum number of trials in worst case: " << eggDrop(n, k) << endl; + return 0; +}