Para resolver esse problema usando programação dinâmica, desenvolvemos uma relação de recorrência. Consideramos uma instância do problema com os primeiros i itens, pesos w1,...,wi, valores v1,...,vi e uma capacidade do pacote j. Definimos F(i, j) como o valor da melhor solução para essa instância.
Observamos que podemos dividir os subconjuntos de itens em dois grupos: aqueles que não incluem o item i e aqueles que o incluem. O valor da melhor solução entre todos os subconjuntos é o máximo desses dois casos.