From 6e5f8f2e787e1eb45b6cfd747398f40a83061127 Mon Sep 17 00:00:00 2001 From: Adrito-M <98008131+Adrito-M@users.noreply.github.com> Date: Mon, 30 May 2022 23:00:15 +0530 Subject: [PATCH 1/2] Create 0-1 knapsack.cpp --- c++/0-1 knapsack.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 c++/0-1 knapsack.cpp diff --git a/c++/0-1 knapsack.cpp b/c++/0-1 knapsack.cpp new file mode 100644 index 0000000..6321f10 --- /dev/null +++ b/c++/0-1 knapsack.cpp @@ -0,0 +1,22 @@ +#include +using namespace std; + + +int weight[] = {10, 20, 30}; +int value[] = {60, 100, 120}; + +int knapsack(int weight_left, int index) { + if (index == -1 or weight_left < weight[index]) return 0; + int a = knapsack(weight_left, index-1); + int b = knapsack(weight_left - weight[index], index-1) + value[index]; + return max(a, b); +} + +int main() +{ + ios_base::sync_with_stdio(false); + cin.tie(NULL); + int bag_weight = 50; + int items = 3; + cout << knapsack(bag_weight, items); +} From 1f7972ab0ffa2693d04646f7241be6a1c07600f7 Mon Sep 17 00:00:00 2001 From: Adrito-M <98008131+Adrito-M@users.noreply.github.com> Date: Mon, 30 May 2022 23:04:25 +0530 Subject: [PATCH 2/2] Update 0-1 knapsack.cpp --- c++/0-1 knapsack.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/c++/0-1 knapsack.cpp b/c++/0-1 knapsack.cpp index 6321f10..b18583b 100644 --- a/c++/0-1 knapsack.cpp +++ b/c++/0-1 knapsack.cpp @@ -4,18 +4,21 @@ using namespace std; int weight[] = {10, 20, 30}; int value[] = {60, 100, 120}; +int dp[1000][1000]; int knapsack(int weight_left, int index) { if (index == -1 or weight_left < weight[index]) return 0; + if (~dp[weight_left][index]) return dp[weight_left][index]; int a = knapsack(weight_left, index-1); int b = knapsack(weight_left - weight[index], index-1) + value[index]; - return max(a, b); + return dp[weight_left][index] = max(a, b); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); + memset(dp, -1, sizeof dp); int bag_weight = 50; int items = 3; cout << knapsack(bag_weight, items);