diff --git a/Algorithms/Dynamic Programming/egg_dropping_puzzle.cpp b/Algorithms/Dynamic Programming/egg_dropping_puzzle.cpp new file mode 100644 index 0000000..9c56d10 --- /dev/null +++ b/Algorithms/Dynamic Programming/egg_dropping_puzzle.cpp @@ -0,0 +1,43 @@ +#include +using namespace std; + +int max(int a, int b) { return (a > b)? a: b; } + +int eggDrop(int n, int k) +{ + int eggFloor[n+1][k+1]; + int res; + int i, j, x; + + for (i = 1; i <= n; i++) + { + eggFloor[i][1] = 1; + eggFloor[i][0] = 0; + } + + for (j = 1; j <= k; j++) + eggFloor[1][j] = j; + + for (i = 2; i <= n; i++) + { + for (j = 2; j <= k; j++) + { + eggFloor[i][j] = INT_MAX; + for (x = 1; x <= j; x++) + { + res = 1 + max(eggFloor[i-1][x-1], eggFloor[i][j-x]); + if (res < eggFloor[i][j]) + eggFloor[i][j] = res; + } + } + } + + return eggFloor[n][k]; +} + +int main() +{ + int n = 10, k = 136; + cout<<"Minimum number of trials needed in worst case: "< + +bool isSubsetSum(int set[], int n, int sum) +{ + bool subset[n+1][sum+1]; + + for (int i = 0; i <= n; i++) + subset[i][0] = true; + + for (int i = 1; i <= sum; i++) + subset[0][i] = false; + + for (int i = 1; i <= n; i++) + { + for (int j = 1; j <= sum; j++) + { + if(j= set[i-1]) + subset[i][j] = subset[i-1][j] || + subset[i - 1][j-set[i-1]]; + } + } + return subset[n][sum]; +} + +int main() +{ + int set[] = {13, 34, 44, 18, 9, 23}; + int sum = 56; + int n = sizeof(set)/sizeof(set[0]); + if (isSubsetSum(set, n, sum) == true) + cout<<"Found a subset with given sum"<