LOG_ENTRY // Dynamic Programming

Space-OptimizedDP:The0/1KnapsackProblem

Apr 2026 12 min read
The Knapsack problem is the gateway to understanding combinatorial optimization. While the 2D matrix is intuitive, the real engineering flex is the space-optimized 1D array.
SOURCE_MANIFEST
class Solution {
    static int knapsack(int[] wt, int[] val, int n, int W) {
        // Space optimized: single row array
        int[] prev = new int[W + 1];

        // Base case: first item
        for (int i = wt[0]; i <= W; i++) {
            prev[i] = val[0];
        }

        for (int ind = 1; ind < n; ind++) {
            for (int cap = W; cap >= 0; cap--) {
                int notTake = prev[cap];
                int take = Integer.MIN_VALUE;
                if (wt[ind] <= cap) {
                    take = val[ind] + prev[cap - wt[ind]];
                }
                prev[cap] = Math.max(take, notTake);
            }
        }
        return prev[W];
    }
}