diff --git a/Codes/C++/Code-A4 (0-1 Knapsack).cpp b/Codes/C++/Code-A4 (0-1 Knapsack).cpp new file mode 100644 index 0000000..bd17444 --- /dev/null +++ b/Codes/C++/Code-A4 (0-1 Knapsack).cpp @@ -0,0 +1,60 @@ +// Code-A4 (0-1 Knapsack) + +#include +#include +using namespace std; + +int knapsack(int W, vector& wt, vector& val, int n) { + // dp[i][w] = max value for first i items with weight limit w + vector> dp(n + 1, vector(W + 1, 0)); + + // Build the table dp[][] bottom-up + for (int i = 1; i <= n; i++) { + for (int w = 1; w <= W; w++) { + if (wt[i - 1] <= w) + dp[i][w] = max(val[i - 1] + dp[i - 1][w - wt[i - 1]], dp[i - 1][w]); + else + dp[i][w] = dp[i - 1][w]; + } + } + + return dp[n][W]; // The bottom-right cell gives the result +} + +int main() { + int n, W; + cout << "Enter number of items: "; + cin >> n; + + vector val(n), wt(n); + cout << "Enter values of items:\n"; + for (int i = 0; i < n; i++) cin >> val[i]; + + cout << "Enter weights of items:\n"; + for (int i = 0; i < n; i++) cin >> wt[i]; + + cout << "Enter capacity of knapsack: "; + cin >> W; + + int maxValue = knapsack(W, wt, val, n); + cout << "\nMaximum value in knapsack = " << maxValue << endl; + + return 0; +} + +// SAMPLE OUTPUT +/* +* $ ./a.out +* Enter number of items: 3 +* Enter values of items: +* 12 +* 32 +* 14 +* Enter weights of items: +* 45 +* 34 +* 65 +* Enter capacity of knapsack: 60 +* +* Maximum value in knapsack = 32 +*/