0 1 Knapsack
Algorithm
dp[i + 1][c] = max(
dp[i][c], // If we skip `i`-th item
dp[i][c-w[i]] + v[i] // If we pick `i`-th item
)
dp[0][c] = 0Implementation
// Time: O(NC)
// Space: O(NC)
vector<vector<int>> dp(N + 1, vector<int>(C + 1));
for (int i = 0; i < N; ++i) {
for (int c = w[i]; c <= C; ++c) {
dp[i + 1][c] = max( dp[i][c], dp[i][c - w[i]] + v[i] );
}
}
return dp[N][C];Space Optimization
A Constant Optimization
Problems
Last updated