# C++ Program to Solve the 0-1 Knapsack Problem

C++Server Side ProgrammingProgramming

In 0-1 knapsack problem, a set of items are given, each with a weight and a value. We need to determine the number of each item to include in a collection so that the total weight is less than or equal to the given limit and the total value is large as possible.

## Input

Value = [10, 20, 30, 40, 60, 70]
Weight=[1, 2, 3, 6, 7, 4]
int w=7

## Output

knapsack value is: 100

## Algorithm

Begin
Input: set of items each with a weight and a value
Set knapsack capacity
Number of items=sizeof(values) / sizeof(values)
Knapsack(Values (stored in array v), Weights (stored in array w), Number of
distinct items (n), Knapsack capacity W)
If (w < 0)
Return
If no items left or capacity becomes 0
Return 0
Include current item n in knapSack (v[n]) and recurs for
remaining items (n - 1) with decreased capacity (W - w[n])
Exclude current item n from knapSack and recurs for
remaining items (n - 1)
Return maximum value we get by including or excluding current item
End

## Example Code

#include <iostream>
#include <climits>
using namespace std;
int knapSack(int v[], int w[], int n, int W) {
if (W < 0)
return INT_MIN;
if (n < 0 || W == 0)
return 0;
int in = v[n] + knapSack(v, w, n - 1, W - w[n]);
int ex = knapSack(v, w, n - 1, W);
return max (in, ex);
}
int main() {
int v[] = { 10, 20, 30, 40, 60, 70 };
int w[] = { 1, 2, 3, 6, 7, 4 };
int W = 7;
int n = sizeof(v) / sizeof(v);
cout << "Knapsack value is " << knapSack(v, w, n - 1, W);
return 0;
}

## Output

Knapsack value is 100