Skip to content

Commit e8c4e2b

Browse files
Merge pull request #610 from jashanwarraich/patch-3
Create 0-1Knapsack.cpp
2 parents 7fbd1e9 + 42c453c commit e8c4e2b

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed

Dynamic Programming/0-1Knapsack.cpp

+128
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
// Q173 https://www.codingninjas.com/codestudio/problems/1072980?topList=striver-sde-sheet-problems&utm_source=striver&utm_medium=website&leftPanelTab=0
2+
3+
4+
5+
6+
// Recursion
7+
// Time: O(2^n)
8+
// Space: O(n)
9+
#include<bits/stdc++.h>
10+
int ks(vector<int> &val, vector<int> &wt, int ind, int W){
11+
if(ind==0) {
12+
if(wt[0]<=W) return val[0];
13+
return 0;
14+
}
15+
int nt=ks(val,wt,ind-1,W);
16+
int t=INT_MIN;
17+
if(wt[ind]<=W)
18+
t=val[ind]+ks(val,wt,ind-1,W-wt[ind]);
19+
return max(t,nt);
20+
}
21+
22+
int maxProfit(vector<int> &val, vector<int> &wt, int n, int W)
23+
{
24+
return ks(val,wt,n-1,W);
25+
}
26+
27+
28+
// Memorisation
29+
// Time: O(N*m)
30+
// Space: O(N*M)+O(N) = auxiliary stack space+ dp
31+
#include<bits/stdc++.h>
32+
int ks(vector<int> &val, vector<int> &wt, int ind, int W,vector<vector<int>> &dp){
33+
if(ind==0) {
34+
if(wt[0]<=W) return val[0];
35+
return 0;
36+
}
37+
if(dp[ind][W]!=-1) return dp[ind][W];
38+
int nt=ks(val,wt,ind-1,W,dp);
39+
int t=INT_MIN;
40+
if(wt[ind]<=W)
41+
t=val[ind]+ks(val,wt,ind-1,W-wt[ind],dp);
42+
return dp[ind][W]=max(t,nt);
43+
}
44+
45+
int maxProfit(vector<int> &val, vector<int> &wt, int n, int W)
46+
{ vector<vector<int>> dp(n,vector<int>(W+1,-1));
47+
return ks(val,wt,n-1,W,dp);
48+
}
49+
50+
51+
52+
53+
54+
// DP
55+
// Time: O(N*m)
56+
// Space: O(N*M)
57+
#include<bits/stdc++.h>
58+
int maxProfit(vector<int> &val, vector<int> &wt, int n, int W)
59+
{ vector<vector<int>> dp(n,vector<int>(W+1,0));
60+
for(int cw=0;cw<W+1;cw++) dp[0][cw]=val[0];
61+
for(int ind=1;ind<n;ind++){
62+
for(int cw=0;cw<=W;cw++){
63+
int nt=dp[ind-1][cw];
64+
int t=INT_MIN;
65+
if(wt[ind]<=cw)
66+
t=val[ind]+dp[ind-1][cw-wt[ind]];
67+
dp[ind][cw]=max(t,nt);
68+
}
69+
70+
}
71+
// for(int ind=0;ind<n;ind++){
72+
// for(int cw=0;cw<=W;cw++){
73+
// cout<<dp[ind][cw]<<" ";
74+
// }
75+
// cout<<endl;
76+
// }
77+
78+
return dp[n-1][W];
79+
80+
}
81+
82+
// TABULATION
83+
// Time: O(N*m)
84+
// Space: O(2*M)
85+
#include<bits/stdc++.h>
86+
int maxProfit(vector<int> &val, vector<int> &wt, int n, int W){
87+
vector<int> p(W+1,0);
88+
vector<int> c(W+1,0);
89+
for(int cw=wt[0];cw<W+1;cw++) p[cw]=val[0];
90+
for(int ind=1;ind<n;ind++){
91+
for(int cw=0;cw<=W;cw++){
92+
int nt=p[cw];
93+
int t=INT_MIN;
94+
if(wt[ind]<=cw)
95+
t=val[ind]+p[cw-wt[ind]];
96+
c[cw]=max(t,nt);
97+
}
98+
p=c;
99+
100+
}
101+
return p[W];
102+
103+
}
104+
105+
106+
107+
// SINGLE ARRAY TABULATION
108+
// Time: O(N*m)
109+
// Space: O(M)
110+
#include<bits/stdc++.h>
111+
int maxProfit(vector<int> &val, vector<int> &wt, int n, int W){
112+
vector<int> p(W+1,0);
113+
// vector<int> c(W+1,0);
114+
for(int cw=wt[0];cw<W+1;cw++) p[cw]=val[0];
115+
for(int ind=1;ind<n;ind++){
116+
for(int cw=W;cw>=0;cw--){
117+
int nt=p[cw];
118+
int t=INT_MIN;
119+
if(wt[ind]<=cw)
120+
t=val[ind]+p[cw-wt[ind]];
121+
p[cw]=max(t,nt);
122+
}
123+
// p=c;
124+
125+
}
126+
return p[W];
127+
128+
}

0 commit comments

Comments
 (0)