Enfoque T-SQL dinámico para combinatoria / mochila

Creo que mi pregunta tiene que ver con una variante del problema de la mochila, pero realmente no puedo encontrar una solución para esto:

Digamos que está en una ferretería y necesita comprar 21 tornillos. Solo los ofrecen en bolsas:

Bolsa X - 16 Tornillos - 1.56 $ por tornillo - 25 $ TotalBolsa Y - 8 Tornillos - 2.25 $ por tornillo - 18 $ TotalBolsa Z - 4 tornillos - 1.75 $ por tornillo - 7 $ Total

Ahora debe averiguar qué bolsas debe comprar para obtener sus 21 tornillos (¡o más!) Al precio más bajo posible.

Entonces, lo que obtuve es una tabla con todas las bolsas y una variable para definir la cantidad requerida. Lo que necesito como resultado debería ser una tabla con el nombre del bolso y la cantidad requerida.

Desafortunadamente, sqlfiddle no funciona ... Pero al menos aquí están los datos de ejemplo:

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

¡Realmente aprecio tu ayuda! Espero que podamos resolver esto, ya que necesito personalizar el sistema ERP de nuestra empresa con esta importante función.

¡Gracias de antemano!

Editar: leí todo el artículo de Wikipedia sobre la mochila y allí dice:Algoritmo de aproximación de sobrellenado Es posible generar un algoritmo de aproximación donde podamos desbordar ligeramente el límite de peso permitido. Desea alcanzar al menos un valor total tan alto como el límite B dado, pero puede superar el límite de peso ...Actualmente la solución es desconocida para este algoritmo de aproximación.

Entonces, ¿parece que es mejor usar un algoritmo codicioso en lugar de inventar la rueda? ;)

Respuestas a la pregunta(2)

Su respuesta a la pregunta