2017-11-09 3 views
0

ich auf diese folgende Frage kam,Count Reihe von Möglichkeiten, Spieler 1 in einem 2-Spieler-Spiel gewinnen

2 Spieler ein Spiel spielen. In jedem Zug erhalten beide Spieler Punkte im Bereich von -x bis + x (beide enthalten). Spieler 1 beginnt mit Punkt 1 und Spieler 2 beginnt mit Punkt 2. Wenn sie insgesamt k Züge spielen, finden Sie die Gesamtzahl der Möglichkeiten, wie Spieler 1 das Spiel gewinnen kann, dh am Ende von k Runden hat Spieler 1 mehr Punkte als Spieler 2.

Also kurz mein Verständnis ist dass wir die Gesamtanzahl der Punktekombinationen für Spieler1 und Spieler2 finden müssen (Summe der Punkte von Spieler1) - (Summe der Punkte von Spieler2)> = p2-p1 + 1

Ich bin Ich bin mir nicht sicher, wie ich dieses Problem angehen soll. Bitte schlagen Sie einen Ansatz vor. Danke im Voraus.

Antwort

1

Lösen Sie dies rekursiv. Lassen Sie uns anhand Ihrer Variablen die Fälle betrachten: Lassen

score_range = [-x : x] 

Rufen Sie die Funktion win_count

Basis Fall k == 1

wenn k == 1, gibt es eine Umdrehung zu gehen. Die Score-Differenz ist p2-p1. Wenn Spieler 2 in dieser Runde n2 Punkte erzielt, muss Spieler 1 diese Runde mit mindestens (p2 + n2) - p1 + 1 Punkten abschließen. Nun, wie viele Kombinationen davon sind verfügbar mit p1, p2 in score_range? Sie können dies direkt aus den angegebenen Ganzzahlen berechnen.

Geben Sie diesen Wert als Funktionswert zurück.

Rekursion Fall k> 1

Spaziergang durch alle möglichen Werte für diese Runde. Wiederhole die Möglichkeiten für den Rest des Spiels.

count = 0 
for n1 in score_range 
    for n2 in score_range 
     count += win_count(p1+n1, p2+n2, k-1, x) 

Können Sie es von dort nehmen?

+0

Es muss eine DP-Formulierung für dieses Recht geben? Zum Beispiel könnten wir anstelle von -x bis + x auch 0 bis 2x als unseren Bereich verwenden und die endgültige Antwort sollte immer noch dieselbe sein. Ich bin mir nicht ganz sicher, was ich zu beachten habe. Wird es ein 3D-Array sein, eine Dimension für die Runde, jeweils eins für die Scores von Spieler 1 und 2? – user2980096

+1

Gute Arbeit - natürlich gibt es eine DP-Verbesserung. Mach dir keine Mühe, dein eigenes zu bauen; Verwenden Sie einfach den '@ memoize' Dekorator (Sie können das Paket nachschlagen). Es gibt vier Parameter für die Funktion, aber eine ist konstant, so dass es drei aktive Tasten für die Memo-Zuweisung gibt: 'p1, p2, k'. – Prune

+0

Vielen Dank für Ihre Lösung! – user2980096