Diskleimer: Das nachfolgend beschriebene Verfahren ist nicht universell, kann aber oft die Herausforderung erfüllen oder die richtige Lösung erreichen.
Wenn Sie die Existenz eines Resets überprüfen oder eine Reihe von geeigneten Umkehrungen oder etwas finden müssen, sollten Sie über die Anwendung der dynamischen Programmierung für Multiplikatoren nachdenken.
Der Hauptparameter wird die Kampfmaske sein, die zeigt, welche Elemente bereits in der Konversion enthalten sind und welche nicht. Oft ist auch ein zweiter Parameter erforderlich, der zeigt, was das letzte Element war.
Häufige Reklamation ist im Kontext von Graphen zu erkennen. Wir werden daher ein klassisches Beispiel, eine Gambilleton-Straße betrachten.
Hamiltons' Reise ist ein einfacher Weg durch jede Reihe der Zählung einmal. Es kann sich nur als Umwandlung der Länge n vorstellen, wobei n die Anzahl der Spitzen ist. Die Reihenfolge innerhalb dieses Rücksetzens gibt an, wie die Gipfel passieren.
Um die Existenz einer Hamilton-Straße in der Box zu überprüfen, werden wir dp[mask][last] - gibt es einen einfachen Weg, der die in der Fledermausmaske markierten Spitzen bestanden hat und am oberen Ende endete.
Anfangswerte werden dp[2I][i] = wahr, der Rest ist falsch, was bedeutet, dass es immer einen leeren Pfad gibt, der an einem der Oberseiten beginnt.
Mit der Bedeutung von wahr in dp[mask][letzte] werden wir die Übergänge nach vorne im Sinne von "verkaufter Straße" machen. Wir suchen also nach der Anzahl der Spitzen, die in der Maske vernichtet werden (wir haben sie nicht im Weg besucht) und dass es eine Rippe von letzter bis zu dieser Spitze gibt (die Menge muss durch die vorhandene Rippe erweitert werden). Wir tun dp[mask есть 2k.][k] = wahr, wenn dp[mask][last] = true und mask 2k. = 0 (über k noch nicht besucht) Und es gibt eine Rippen-Letzt-national k.
Letztlich sind Hamiltons auf dem Weg, wenn es einen Wert in dp auf die Parameter einer Kampfmaske gibt, die nur aus Einheiten und jedem letzten Peak besteht.