AlgoPlus v0.1.0
Loading...
Searching...
No Matches
knapsack_2d.h
1#ifndef KNAPSACK_H
2#define KNAPSACK_H
3
4#ifdef __cplusplus
5#include <iostream>
6#include <utility>
7#include <vector>
8#endif
9
17int knapsack(std::vector<std::pair<int, int>>& v, int capacity) {
18 if (capacity == 0) {
19 return 0;
20 }
21
22 int n = int(v.size());
23 std::vector<std::vector<int>> dp(n + 1, std::vector<int>(capacity + 1));
24
25 for (int i = 1; i <= n; i++) {
26 for (int j = 0; j <= capacity; j++) {
27 dp[i][j] = dp[i - 1][j];
28 if (i == 0 || j == 0) {
29 dp[i][j] = 0;
30 } else if (v[i - 1].first <= j) {
31 dp[i][j] = std::max(dp[i - 1][j], v[i - 1].second + dp[i - 1][j - v[i - 1].first]);
32 }
33 }
34 }
35
36 return dp[n][capacity];
37}
38
39#endif