Pseudo-polynomial dynamic programming has two opposite movements.
First, it compresses a large combinatorial search space into a table of states. For knapsack, brute force asks which of the subsets should be chosen. The dynamic programme instead keeps a table entry : after considering the first items, what is the best value at capacity ?
Many different subsets can lead to the same state . Once they do, the algorithm forgets the histories and keeps only the best value.
That is the compression: many histories collapse into one table entry.
The Expansion
The second movement goes in the other direction. The state coordinate ranges over every capacity value .
If is stored in binary, then the input contains only bits for this capacity. But the table has columns. In other words, one compact field expands into a unary-sized interval of states:
So pseudo-polynomial DP compresses the combinatorial part while expanding the numeric part.
The Point
For knapsack, dynamic programming replaces the brute-force search space by a table of size roughly . For Bi Knapsack, the table becomes with size .
This can be a real compression of the subset search. But it is not necessarily ordinary polynomial time, because the numeric dimensions may be exponentially larger than their binary encodings.
Therefore, pseudo-polynomial dynamic programming compresses histories into states, but may expand compact numeric inputs into unary-sized table dimensions.