Il y a personnes à une table. La ème personne doit payer dollars.
Certaines personnes n'ont pas les bonnes factures pour payer exactement , alors elles proposent l'algorithme suivant.
Tout d'abord, tout le monde met une partie de son argent sur la table. Ensuite, chaque individu reprend l'argent qu'il a payé en trop.
Les factures ont un ensemble fixe de coupures (ne font pas partie de l'entrée).
Un exemple: supposons qu'il y ait deux personnes, Alice et Bob. Alice doit 5 $ et a cinq billets de 1 $ . Bob doit 2 $ et a un billet de 5 $ . Après qu'Alice et Bob aient mis tout leur argent sur la table, Bob reprend 3 $ et tout le monde est content.
Bien sûr, il y a des moments où l'on n'a pas à mettre tout son argent sur la table. Par exemple, si Alice avait mille billets de 1 $ , il n'est pas nécessaire qu'elle les mette tous sur la table puis les reprenne.
Je veux trouver un algorithme avec les propriétés suivantes:
L'entrée spécifie le nombre de personnes, combien chaque personne doit et combien de factures de chaque dénomination chaque personne a.
L'algorithme indique à chaque personne les factures à mettre sur la table au premier tour.
L'algorithme indique à chaque personne les factures à retirer du tableau au deuxième tour.
Le nombre de factures déposées sur la table + le nombre de factures retirées de la table est minimisé.
S'il n'y a pas de solution réalisable, l'algorithme renvoie simplement une erreur.