+ - problème de sac à dos

9

Étant donné un ensemble d'articles, chacun avec un poids et une valeur, déterminez le nombre de chaque article à inclure dans une collection afin que le poids total soit inférieur ou égal à une limite donnée et que la valeur totale soit aussi grande que possible.

Wikipédia pour plus d'informations

Par exemple, vous pouvez avoir un poids maximum de 15 et des objets avec une valeur / masse [5,2], [7,4] [1,1]et vous produiriez [7,0,1]7 [5 <value>, 2 <mass>]objets et 1 [1 <value>, 1 <mass>]objet pour un score de 36.

Règles

L'entrée peut être prise dans n'importe quel format raisonnable

La sortie est également un format flexible,

Vous ne pouvez pas utiliser des bibliothèques non standard. Si vous devez installer ou télécharger une bibliothèque pour l'utiliser séparément de la configuration initiale, cela n'est pas autorisé

Les objets peuvent avoir une masse et une valeur négatives (c'est-à-dire -1, -1)

Réponses optimales requises

Gagnant

Victoires de code les plus courtes

Masse et valeur négatives?

C'est un élément clé de ce défi. Disons que vous avez un objet avec des objets (masse, valeur) comme [4,3],[-1,-1]et un sac d'une capacité de 15. Vous pouvez mettre 3 des premiers et marquer 9 ou mettre 4 des premiers et l'un des -1, -1 objet pour un score de 11.

Christophe
la source
bac à sable
Christopher
Pouvons-nous supposer qu'aucun objet n'aura une masse non positive?
HyperNeutrino
@HyperNeutrino suppression d'une seconde pour les modifications
Christopher
2
Pouvons-nous supposer que tout est un entier? De plus, aurons-nous à traiter des cas comme [[2, 1], [-1, -1]] où la valeur totale peut être arbitrairement élevée?
5
Le titre est trompeur. En raison des poids négatifs, ce n'est pas le problème du sac à dos, mais une variation du problème de programmation linéaire.
ngn

Réponses:

2

Pyth, 18 octets

h.MshMZfghQseMTy*F

Sorties sous forme de liste de paires [valeur, poids]. Extrêmement inefficace, mais il est NP-complet.
Essayez-le ici

Explication

h.MshMZfghQseMTy*F
               y*FQ  Get all sets with up to <capacity> of each item.
       fghQseMT      Choose the sets whose total weight fits in the bag.
 .MshMZ              Choose those with the highest value.
h                    Take the first.

la source