knapsack problem linear programming code example

Example 1: greedy knapsack

def greedy_knapsack(values,weights,capacity):
    n = len(values)
    def score(i) : return values[i]/weights[i]
    items = sorted(range(n)  , key=score , reverse = True)
    sel, value,weight = [],0,0
    for i in items:
        if weight +weights[i] <= capacity:
            sel += [i]
            weight += weights[i]
            value += values [i]
    return sel, value, weight


weights = [4,9,10,20,2,1]
values = [400,1800,3500,4000,1000,200]
capacity = 20

print(greedy_knapsack(values,weights,capacity))

Example 2: knapsack problem

// memory efficient and iterative approach to the knapsack problem

#include <bits/stdc++.h>
using namespace std;

// n is the number of items
// w is the knapsack's capacity
int n, w;

int main() {
/*
input format:
n w
value_1 cost_1
value_2 cost_2
.
.
value_n cost_n
*/
    cin >> n >> w;
  	vector<long long> dp(w + 1, 0);

    for (int i = 0; i < n; ++i) {
        int value, cost;
        cin >> value >> cost;
        for (int j = w; j >= cost; --j)
            dp[j] = max(dp[j], value + dp[j - cost]);
    }

    // the answer is dp[w]
    cout << dp[w];
}