Alice et Bob sont les deux participants d'un challenge de programmation un peu particulier. Il font face en début de journée à une liste de 60 problèmes, chaque problème pouvant rapporter un certain nombre de points. Ils doivent se répartir les problèmes, et chacun essaie d'avoir à résoudre les problèmes qui rapportent le plus de points.
Un protocole a été mis en place pour qu'Alice et Bob se répartissent les problèmes : chacun à leur tour ils pourront choisir le premier ou le dernier de la liste. Pour cela, il ont juste à décider s'ils prennent le problème du début (D) ou le problème de fin (F). Une fois un problème choisi, il est enlevé de la liste des problèmes disponibles. C'est Alice qui commence à choisir son premier problème.
Défi :
La liste des points affectés aux problèmes et donnée en entrée. Sachant qu'Alice et Bob sont tous les deux capables de faire les choix qui vont maximiser leur gain potentiel, et qu'ils préféreront toujours prendre le problème du début dans le cas où les deux alternatives promettent le même gain final, quelle sera la séquence de D et de F qu'ils vont produire ?
Testez votre code :
Si la liste des problèmes était (2,20,10,1,3,1), les problèmes seraient choisis ainsi :
En faisant ces choix, Alice totalise 22 points et Bob en totalise 15. Sachant que chacun joue au mieux, aucun d'eux ne peut espérer faire plus que ce score là. Une séquence de choix optimaux serait donc : FFFDDD (ou FFFDDF puisque le dernier pris est à la foix au début et à la fin).
Voici un autre exemple. Si la liste des problèmes est (1,8,2,3,7,6,4,5) alors la partie jouée sera FDDFDDDD, ce qui donnera un total de 22 pour Alice et 14 pour Bob.