Abordagem dinâmica de T-SQL para combinatória / mochila

Acho que minha pergunta tem a ver com uma variante do problema da mochila, mas não consigo realmente encontrar uma solução para isso:

Digamos que você esteja em uma loja de ferragens e precise comprar 21 parafusos. Eles apenas os oferecem em sacos:

Saco X - 16 Parafusos - 1,56 $ por parafuso - 25 $ TotalSaco Y - 8 Parafusos - 2,25 $ por parafuso - 18 $ TotalSaco Z - 4 Parafusos - 1,75 $ por parafuso - 7 $ Total

Agora você precisa descobrir quais bolsas você deve comprar para obter seus 21 parafusos (ou mais!) Pelo menor preço possível.

Então, o que recebi é uma mesa com todas as sacolas e uma variável para definir a quantidade necessária. O que eu preciso como resultado deve ser uma tabela com o nome da mala e a quantidade necessária.

Infelizmente o sqlfiddle está inoperante. Mas pelo menos aqui estão os dados de exemplo:

declare @bags table (id int, qty int, price decimal(19,4))
insert into @bags values
 (10, 16, 25.00)
,(20, 8, 18.00)
,(30, 4, 7.00)

declare @ReqQty int = 21

Eu realmente aprecio sua ajuda! Espero que possamos resolver isso, pois preciso personalizar o sistema ERP da empresa com essa importante função.

Agradeço antecipadamente!

Edit: Eu li o artigo inteiro da Wikipedia sobre mochila e lá diz:Algoritmo de aproximação de transbordamento Pode ser possível gerar um algoritmo de aproximação, onde podemos exceder levemente o limite de peso permitido. Você deseja atingir um valor total pelo menos tão alto quanto o limite B fornecido, mas pode exceder o limite de peso ...Atualmente, a solução é desconhecida para este algoritmo de aproximação.

Parece que é melhor usar um algoritmo ganancioso em vez de inventar a roda? ;)

questionAnswers(2)

yourAnswerToTheQuestion