Skip to content

Commit 72de28e

Browse files
committed
added knapsack
1 parent 05bd7b3 commit 72de28e

7 files changed

+172
-86
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#include<bits/stdc++.h>
2+
#define lli long long int
3+
#define endl "\n"
4+
#define MAX 1005
5+
using namespace std;
6+
7+
int dp[1002][1002];
8+
9+
int knapsack(int weight[], int value[], int w, int index)
10+
{
11+
if((index < 0) || (w == 0))
12+
return 0;
13+
14+
if(dp[index][w] != -1)
15+
return dp[index][w];
16+
17+
if(weight[index] <= w)
18+
return dp[index][w] = max((value[index] + knapsack(weight, value, w - weight[index], index-1)),knapsack(weight, value, w, index-1));
19+
else
20+
return dp[index][w] = knapsack(weight, value, w, index-1);
21+
}
22+
23+
int main()
24+
{
25+
int t;
26+
cin>>t;
27+
while(t--)
28+
{
29+
memset(dp, -1, sizeof(dp));
30+
int n, w;
31+
cin>>n>>w;
32+
int weight[n], value[n];
33+
for(int i =0; i<n; i++)
34+
cin>>value[i];
35+
for(int i =0; i<n; i++)
36+
cin>>weight[i];
37+
cout<<knapsack(weight, value, w, n-1)<<endl;
38+
}
39+
return 0;
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include<bits/stdc++.h>
2+
#define MAX 1005
3+
using namespace std;
4+
5+
vector < vector<int> > dp(MAX, vector<int> (MAX, -1));
6+
7+
int knapsack(vector <int> weight, vector <int> value, int maxweight, int index)
8+
{
9+
//base condition
10+
if( (index < 0) || (maxweight <= 0) )
11+
return 0;
12+
if(dp[index][maxweight] == -1)
13+
{
14+
if(weight[index] <= maxweight)
15+
dp[index][maxweight] = max(value[index] + knapsack(weight, value, maxweight - weight[index], index-1), knapsack(weight, value, maxweight, index-1));
16+
17+
else
18+
dp[index][maxweight] = knapsack(weight, value, maxweight, index-1);
19+
}
20+
return dp[index][maxweight];
21+
}
22+
23+
24+
25+
int main()
26+
{
27+
int n;
28+
cout<<"Enter the number of items: ";
29+
cin>>n;
30+
vector <int> weight(n), value(n);
31+
32+
cout<<"enter weights: "<<endl;
33+
for(int i=0; i<n; i++)
34+
cin>>weight[i];
35+
cout<<"enter values: "<<endl;
36+
for(int i=0; i<n; i++)
37+
cin>>value[i];
38+
39+
40+
int maxweight;
41+
42+
cout<<"Enter maximum capacity of knapsack: ";
43+
cin>>maxweight;
44+
45+
cout<<knapsack(weight, value, maxweight, n-1);
46+
}
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,60 @@
1-
import sys
2-
sys.setrecursionlimit(10**6)
3-
4-
class Node:
5-
def __init__(self, val, pos):
6-
self.left = None
7-
self.right = None
8-
self.pos = pos
9-
self.val = val
10-
11-
def insert(node, val, pos):
12-
if node is None:
13-
print(pos)
14-
return Node(val, pos)
15-
if val < node.val: # move to left child
16-
node.left = insert(node.left, val, 2*pos)
17-
else: # move to right child
18-
node.right = insert(node.right, val, 2*pos+1)
19-
return node
20-
21-
def minValueNode(node):
22-
current = node
23-
while current.left is not None:
24-
current = current.left
25-
return current
26-
27-
def delete(node,val, case=True):
28-
if node is None:
29-
return node
30-
# search
31-
if val < node.val: # move to left child
32-
node.left = delete(node.left, val, case)
33-
elif val > node.val: # move to right child
34-
node.right = delete(node.right, val, case)
35-
else: # here found
36-
if case:
37-
print(node.pos)
38-
# Now delete node and replacement
39-
if node.left is None and node.right is None: # check left child, if None
40-
node = None
41-
elif node.left is None:
42-
node = node.right
43-
elif node.right is None:
44-
node = node.left
45-
else:
46-
temp = minValueNode(node.right)
47-
node.val = temp.val
48-
node.right = delete(node.right, temp.val, False)
49-
return node
50-
root = None
51-
def main(q):
52-
global root
53-
oper, elem = input().split()
54-
if oper == 'i':
55-
root = insert(root, int(elem), 1)
56-
else:
57-
root = delete(root, int(elem), True)
58-
if q>1:
59-
main(q-1)
1+
import sys
2+
sys.setrecursionlimit(10**6)
3+
4+
class Node:
5+
def __init__(self, val, pos):
6+
self.left = None
7+
self.right = None
8+
self.pos = pos
9+
self.val = val
10+
11+
def insert(node, val, pos):
12+
if node is None:
13+
print(pos)
14+
return Node(val, pos)
15+
if val < node.val: # move to left child
16+
node.left = insert(node.left, val, 2*pos)
17+
else: # move to right child
18+
node.right = insert(node.right, val, 2*pos+1)
19+
return node
20+
21+
def minValueNode(node):
22+
current = node
23+
while current.left is not None:
24+
current = current.left
25+
return current
26+
27+
def delete(node,val, case=True):
28+
if node is None:
29+
return node
30+
# search
31+
if val < node.val: # move to left child
32+
node.left = delete(node.left, val, case)
33+
elif val > node.val: # move to right child
34+
node.right = delete(node.right, val, case)
35+
else: # here found
36+
if case:
37+
print(node.pos)
38+
# Now delete node and replacement
39+
if node.left is None and node.right is None: # check left child, if None
40+
node = None
41+
elif node.left is None:
42+
node = node.right
43+
elif node.right is None:
44+
node = node.left
45+
else:
46+
temp = minValueNode(node.right)
47+
node.val = temp.val
48+
node.right = delete(node.right, temp.val, False)
49+
return node
50+
root = None
51+
def main(q):
52+
global root
53+
oper, elem = input().split()
54+
if oper == 'i':
55+
root = insert(root, int(elem), 1)
56+
else:
57+
root = delete(root, int(elem), True)
58+
if q>1:
59+
main(q-1)
6060
main(int(input()))
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
struct FenwickTreeMin {
2-
vector<int> bit;
3-
int n;
4-
const int INF = (int)1e9;
5-
6-
FenwickTreeMin(int n) {
7-
this->n = n;
8-
bit.assign(n, INF);
9-
}
10-
11-
FenwickTreeMin(vector<int> a) : FenwickTreeMin(a.size()) {
12-
for (size_t i = 0; i < a.size(); i++)
13-
update(i, a[i]);
14-
}
15-
16-
int getmin(int r) {
17-
int ret = INF;
18-
for (; r >= 0; r = (r & (r + 1)) - 1)
19-
ret = min(ret, bit[r]);
20-
return ret;
21-
}
22-
23-
void update(int idx, int val) {
24-
for (; idx < n; idx = idx | (idx + 1))
25-
bit[idx] = min(bit[idx], val);
26-
}
27-
};
1+
struct FenwickTreeMin {
2+
vector<int> bit;
3+
int n;
4+
const int INF = (int)1e9;
5+
6+
FenwickTreeMin(int n) {
7+
this->n = n;
8+
bit.assign(n, INF);
9+
}
10+
11+
FenwickTreeMin(vector<int> a) : FenwickTreeMin(a.size()) {
12+
for (size_t i = 0; i < a.size(); i++)
13+
update(i, a[i]);
14+
}
15+
16+
int getmin(int r) {
17+
int ret = INF;
18+
for (; r >= 0; r = (r & (r + 1)) - 1)
19+
ret = min(ret, bit[r]);
20+
return ret;
21+
}
22+
23+
void update(int idx, int val) {
24+
for (; idx < n; idx = idx | (idx + 1))
25+
bit[idx] = min(bit[idx], val);
26+
}
27+
};

0 commit comments

Comments
 (0)