Skip to content

Commit 2eebc5d

Browse files
authored
Merge pull request #34 from vipu18/patch-1
Add unbounded knapsack algorithm in C++
2 parents 70cf2de + 5b68b5e commit 2eebc5d

1 file changed

Lines changed: 51 additions & 0 deletions

File tree

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <climits>
4+
using namespace std;
5+
6+
// Space Optimization version (most efficient)
7+
class Solution
8+
{
9+
public:
10+
int unboundedKnapsack(vector<int> &weight, vector<int> &value, int n, int target)
11+
{
12+
vector<int> prev(target + 1, 0);
13+
for (int i = weight[0]; i <= target; i++)
14+
{
15+
prev[i] = (i / weight[0]) * value[0];
16+
}
17+
for (int i = 1; i < n; i++)
18+
{
19+
for (int tar = 0; tar <= target; tar++)
20+
{
21+
int nott = 0 + prev[tar];
22+
int take = INT_MIN;
23+
if (weight[i] <= tar)
24+
take = value[i] + prev[tar - weight[i]];
25+
prev[tar] = max(nott, take);
26+
}
27+
}
28+
return prev[target];
29+
}
30+
};
31+
32+
int main()
33+
{
34+
int n, W;
35+
cout << "Enter number of items: ";
36+
cin >> n;
37+
vector<int> wt(n), val(n);
38+
cout << "Enter weights: ";
39+
for (int i = 0; i < n; ++i)
40+
cin >> wt[i];
41+
cout << "Enter values: ";
42+
for (int i = 0; i < n; ++i)
43+
cin >> val[i];
44+
cout << "Enter knapsack capacity: ";
45+
cin >> W;
46+
47+
Solution sol;
48+
int result = sol.unboundedKnapsack(wt, val, n, W);
49+
cout << "Maximum value: " << result << endl;
50+
return 0;
51+
}

0 commit comments

Comments
 (0)