Note: ceci est un résumé, une reformulation d'un problème de la vie réelle concernant les commandes d'enregistrements dans un fichier SWF. Une solution va m'aider à améliorer une application open-source.
Bob a un magasin, et veut faire une vente. Son magasin porte un certain nombre de produits, et il y a un certain entier quantité d'unités de chaque produit en stock. Il a également un certain nombre de plateau monté sur des étiquettes de prix (autant que le nombre de produits), avec les prix déjà imprimé sur eux. Il peut placer n'importe quel prix étiquette sur un produit (prix unitaire d'un article pour l'ensemble de son stock de ce produit), toutefois, certains produits ont une restriction supplémentaire - ce produit peut ne pas être moins cher que celui d'un autre produit.
Vous devez trouver comment organiser les étiquettes de prix, tels que le coût total de l'ensemble de Bob marchandises est aussi faible que possible. Le coût total est la somme de chaque produit de l'étiquette de prix multiplié par la quantité de ce produit en stock.
Donnée:
- N – le nombre de produits et des étiquettes de prix
- Si, 0≤i<N – la quantité en stock du produit avec l'indice i (entier)
- Pj, 0≤j<N – le prix sur l'étiquette de prix avec l'indice j (entier)
- K – le nombre de contrainte supplémentaire paires
- Ak, Bk, 0≤k<K – produit des indices pour la contrainte supplémentaire
- Tout produit de l'indice peut apparaître plus d'une fois dans B. Ainsi, le graphe formé par cette liste d'adjacence est en fait un ensemble de dirigé les arbres.
Le programme doit trouver:
- Mi, 0≤i<N – cartographie à partir du produit de l'indice de prix étiquette de l'indice (PMi est le prix du produit i)
Pour satisfaire les conditions suivantes:
- PMUnk ≤ PMBkpour 0≤k<K
- Σ(Si × PMi) pour 0≤i<N est minime
Notez que si ce n'est pour la première condition, la solution serait tout simplement de tri des étiquettes de prix et les produits en quantité, et correspondant à la fois directement.
Les valeurs typiques pour l'entrée sera N,K<10000. Dans le problème de la vie réelle, il y a seulement plusieurs étiquettes de prix (1,2,3,4).
Voici un exemple de pourquoi la plupart des solutions simples (y compris le tri topologique) ne fonctionne pas:
Vous disposez de 10 éléments avec les quantités de 1 à 10, et 10 étiquettes de prix avec le prix de $1 à $10. Il y a une condition: le point avec la quantité de 10 ne doit pas être moins cher que l'élément avec la quantité 1.
La solution optimale est:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2
avec un coût total de $249. Si vous placez le 1,10 paire près de l'extrême, le coût total sera plus élevé.