Winklers Problem beim Pizzasammeln:
- Eine kreisförmige Pizzakuchenscheibe
n
, bei der die Scheibei
eine Fläche hat,S_i
dh die Fläche ist für jedes Tortenstück unterschiedlich. - Die Esser Alice und Bob pflücken abwechselnd Scheiben, aber es ist unhöflich, mehrere Lücken in der Torte zu schaffen (betrachten Sie es als nicht erlaubt).
- Somit ist jeder Esser darauf beschränkt, eine der beiden Scheiben neben dem offenen Bereich zu nehmen. Alice geht zuerst und beide Esser suchen so viel Kuchen wie möglich.
Wie würde ein dynamischer Programmieralgorithmus bestimmen, wie viel Kuchen Alice isst, wenn sowohl Alice als auch Bob perfekt spielen, um ihren Pizzakonsum zu maximieren?
Mein Verständnis:
In einem allgemeinen DP-Problem suchen wir nach Unterproblemen, die mithilfe eines Rekursionsbaums oder genauer gesagt mithilfe einer DAG visualisiert werden können. Hier finde ich keinen Anhaltspunkt, um die Unterprobleme hier zu finden.
Hier müssen wir für einen gegebenen Satz von S_i s die Fläche der von Alice verzehrten Scheiben maximieren. Dies hängt von der Auswahl einer Permutation von Pizzastücken aus (n-1) Permutationen ab. Wenn Sie aus zwei Optionen, die Alice in jeder n \ 2 Runde erhält, ein Slice mit maximaler Fläche auswählen, erhalten Sie die Gesamtfläche des Slice für eine Permutation. Für all diese Permutationen müssen wir einen Slice-Bereich finden. Und dann das Maximum aus diesen.
Kann mir jemand helfen, wie ich vorgehen soll?
quelle
pizzaAmount
do nur vom Start- und Stoppindex der verbleibenden Scheiben abhängt und nicht von der Reihenfolge, in der Sie und Ihr Freund bereits Pizzastücke gegessen haben, sodass Sie das Ergebnis in a speichern können Matrix, um eine Neuberechnung zu vermeiden. Die Reihenfolge des Algorithmus ist daher O (n ** 2).Definieren Sie für einen Teil der Pizza
F(i,j)
als Maximum, wie viel Person, die zuerst ein Stück auswählt, essen kann. Teile eines Teils der Pizza(i,j)
sind:Definieren Sie
R(i,j)
(wie viel für die zweite Person übrig ist) alssum(S_x, x in slices(i,j)) - F(i,j)
.Mit:
Das Maximum, das Alice essen kann, wird berechnet durch:
quelle