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