Encontrei um problema em que o objetivo era usar a programação dinâmica (em vez de outras abordagens). Há uma distância a ser estendida e um conjunto de cabos de diferentes comprimentos. Qual é o número mínimo de cabos necessários para percorrer exatamente a distância?
Para mim, isso parecia um problema de mochila , mas como poderia haver múltiplos de um comprimento específico, era um problema de mochila limitado, em vez de um problema de mochila 0/1. (Trate o valor de cada item como seu peso.) Adotando a abordagem ingênua (e não se importando com a expansão do espaço de pesquisa), o método que eu usei para converter o problema da mochila limitada em um problema da mochila 0/1 era simplesmente divida os múltiplos em singles e aplique o conhecido algoritmo de programação dinâmica. Infelizmente, isso leva a resultados abaixo do ideal.
Por exemplo, cabos fornecidos:
1 x 10 pés,
1 x
7 pés, 1 x 6 pés,
5 x 3 pés,
6 x 2 pés,
7 x 1 pé
Se o intervalo alvo for de 13 pés, o algoritmo DP seleciona 7 + 6 para expandir a distância. Um algoritmo ganancioso teria escolhido 10 + 3, mas é um empate para o número mínimo de cabos. O problema surge ao tentar abranger 15 pés. O algoritmo DP acabou escolhendo 6 + 3 + 3 + 3 para obter 4 cabos, enquanto o algoritmo ganancioso escolhe corretamente 10 + 3 + 2 para apenas 3 cabos.
De qualquer forma, ao fazer uma varredura leve de conversão limitada a 0/1, parece a abordagem conhecida para converter vários itens em {p, 2p, 4p ...}. Minha pergunta é como essa conversão funciona se p + 2p + 4p não soma o número de vários itens. Por exemplo: eu tenho 5 cabos de 3 pés. Não posso muito bem adicionar {3, 2x3, 4x3} porque 3 + 2x3 + 4x3> 5x3. Devo adicionar {3, 4x3}?
[Atualmente, estou tentando escrever o artigo "Oregon Trail Knapsack Problem", mas atualmente parece que a abordagem usada não é a programação dinâmica.]