Problème de cueillette de pizza de Winkler:
- Une tarte à pizza circulaire de
n
tranches, où la tranchei
a une zone,S_i
c'est-à-dire que la zone est différente pour chaque morceau de tarte. - Les mangeurs Alice et Bob choisissent à tour de rôle des tranches, mais il est impoli de créer plusieurs lacunes dans la tarte (considérez que ce n'est pas autorisé).
- Ainsi, chaque mangeur est limité à prendre l'une des deux tranches adjacentes à la région ouverte. Alice va en premier, et les deux mangeurs cherchent autant de tarte que possible.
Comment un algorithme de programmation dynamique déterminerait-il combien de tarte Alice mange, si Alice et Bob jouent parfaitement pour maximiser leur consommation de pizza?
Ma compréhension:
Dans un problème DP général, nous allons de l'avant avec la recherche de sous-problèmes qui peuvent être visualisés à l'aide d'un arbre de récursivité ou, plus précisément, à l'aide d'un DAG. Ici, je ne trouve aucune piste pour trouver les sous-problèmes ici.
Ici, pour un ensemble donné de S_i s, nous devons maximiser la surface des tranches consommées par Alice. Cela dépendra du choix d'une permutation de tranches de pizza parmi (n-1) permutations. Choisir une tranche de zone maximale parmi deux options disponibles à chaque n \ 2 tours qu'Alice obtient, nous donnera la zone totale de tranche pour une permutation. Nous devons trouver une zone de tranche pour toutes ces permutations. Et puis le maximum de ceux-ci.
Quelqu'un peut-il m'aider à avancer?
la source
pizzaAmount
ne dépend que de l'indice de début et de fin des tranches restantes et non de la séquence des tranches de pizza que vous et votre ami avez déjà mangées afin que vous puissiez stocker le résultat dans un matrice pour éviter le recalcul. L'ordre de l'algorithme est donc O (n ** 2).Pour une partie de la pizza, définissez
F(i,j)
la quantité maximale que la personne qui choisit la première tranche peut manger. Les tranches de pizza(i,j)
sont:Définissez
R(i,j)
(combien il reste pour la deuxième personne) commesum(S_x, x in slices(i,j)) - F(i,j)
.Avec:
maximum qu'Alice peut manger est calculé par:
la source