From 52b3f16be781269b294b410170ac66dff24d7cf0 Mon Sep 17 00:00:00 2001 From: Yashica Date: Tue, 6 Oct 2020 09:39:19 +0530 Subject: [PATCH 1/2] Knapsack0/1 in C added --- Dynamic-Programming/knapsack01dp.c | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Dynamic-Programming/knapsack01dp.c diff --git a/Dynamic-Programming/knapsack01dp.c b/Dynamic-Programming/knapsack01dp.c new file mode 100644 index 0000000..bdf4cae --- /dev/null +++ b/Dynamic-Programming/knapsack01dp.c @@ -0,0 +1,43 @@ +#include +#include +#include +void knapsack01(int v[], int wt[], int n, int M) { + int c[100][100],w,i; + int keep[100][100]; + for (w = 0; w <= M; w++) { + c[0][w] = 0; + } + for (i = 0; i <= n; i++) { + c[i][0] = 0; + } + for (i = 1; i <= n; i++) { + //int w = wt[i]; + for (w = 1; w <= M; w++) { + if (wt[i] <= w && (v[i] + c[i-1][w-wt[i]] > c[i-1][w])) { + c[i][w] = v[i] + c[i-1][w-wt[i]]; + keep[i][w] = 1; + } + else { + c[i][w] = c[i-1][w]; + keep[i][w] = 0; + } + } + } + printf("\n\n Maximum Profit = %d",c[n][M]); +} + +void main() { + int n,i; + int weight[n], value[n]; + int M = 0; + printf("Enter the number of items: \n"); + scanf("%d",&n); + for (i = 1; i <= n; i++) { + printf("Item [%d] Weight and Value: ",i); + scanf("%d %d",&weight[i],&value[i]); + } + printf("\nEnter the capacity of the bag: "); + scanf("%d",&M); + knapsack01(value,weight,n,M); + getch(); +} From 2e24a28f7a428c1db53eea3b4dbf56acf6439759 Mon Sep 17 00:00:00 2001 From: Yashica Date: Tue, 6 Oct 2020 11:51:24 +0530 Subject: [PATCH 2/2] Time Complexity of Knapsack0/1 added --- Dynamic-Programming/knapsack01dp.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Dynamic-Programming/knapsack01dp.c b/Dynamic-Programming/knapsack01dp.c index bdf4cae..da8bf23 100644 --- a/Dynamic-Programming/knapsack01dp.c +++ b/Dynamic-Programming/knapsack01dp.c @@ -1,9 +1,14 @@ +//Knapsack 0/1 algorithm of this code takes θ(nw) times +//table c has (n + 1).(w + 1) entries, where each entry requires θ(1) time to compute. +//where n is the number of item and w is the weight + #include -#include -#include +#include +#define MAX 100 + void knapsack01(int v[], int wt[], int n, int M) { - int c[100][100],w,i; - int keep[100][100]; + int c[MAX][MAX],w,i; + int keep[MAX][MAX]; for (w = 0; w <= M; w++) { c[0][w] = 0; } @@ -11,7 +16,6 @@ void knapsack01(int v[], int wt[], int n, int M) { c[i][0] = 0; } for (i = 1; i <= n; i++) { - //int w = wt[i]; for (w = 1; w <= M; w++) { if (wt[i] <= w && (v[i] + c[i-1][w-wt[i]] > c[i-1][w])) { c[i][w] = v[i] + c[i-1][w-wt[i]]; @@ -26,9 +30,9 @@ void knapsack01(int v[], int wt[], int n, int M) { printf("\n\n Maximum Profit = %d",c[n][M]); } -void main() { +int main() { int n,i; - int weight[n], value[n]; + int weight[MAX], value[MAX]; int M = 0; printf("Enter the number of items: \n"); scanf("%d",&n); @@ -39,5 +43,5 @@ void main() { printf("\nEnter the capacity of the bag: "); scanf("%d",&M); knapsack01(value,weight,n,M); - getch(); + return 0; }