Anzahl der möglichen Wege der Zuweisung freie Grundstücke zu den Gebäuden mit der Einschränkung, dass keine zwei aufeinander folgenden Grundstücke vorhanden, auf denen es erlaubt ist, zu bauen
Ich kann nicht scheinen, um herauszufinden, eine Lösung für diese überall. Nachstehend finden Sie eine Beschreibung des Problems:
Problem Statement
König Kohima reserviert hat eine neue exklusive street, für seine Business-class-Mitarbeiter, wo können Sie bauen Ihre Häuser .Er hat zugewiesen Sie planen, die Straße .Sie haben zu entscheiden, welche Grundstücke entlang der Straße ist es erlaubt, bauen neue Gebäude. Um dies zu, Sie möchten berechnen zuerst die Anzahl der Möglichkeiten für die Zuweisung freie Grundstücke zu den Gebäuden mit der Einschränkung, dass keine zwei aufeinander folgenden Grundstücke vorhanden, auf denen es erlaubt ist, zu bauen - Sie wollen den Bewohnern das Gefühl, dass Sie mehr Freiraum, so dass Sie glücklich Leben. Die Straße ist unterteilt in M Abschnitte. Jeder Abschnitt entspricht, um zwei Grundstücke, eines auf jeder Seite der Straße. Finden Sie die Anzahl der möglichen Zuordnungen.
Input/Output Spezifikationen
Input Specs
In der ersten Zeile, die Sie gegeben sind M ( 0 < - M - ≤ 1000 ).
Output Specs
Sie müssen die Ausgabe von Ergebnis an die variable output1.
Hinweis: In Fall gibt es keine mögliche Lösung, die Sie brauchen, um wieder eine " 0 " als Ausgabe.
Beispiel
Eingang:
3
Ausgabe:
25
Beispiel Erläuterung:
Wenn man mal nur auf die eine Straßenseite und mark X als ein Grundstück, wo der Bau zulässig ist und Y als freie Grundstück haben wir: XYX, YXY, YYX, XYY YYY.
Da die gleiche Anzahl vorhanden, auf der anderen Seite haben wir 5*5 = 25 Kombinationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage kann gelöst werden, indem die Dynamische Programmierung. Wenn wir speichern die Anzahl der Anzahl X und Anzahl Y, Wenn das Ende-Zeichen ist Y, dann ist es Ergebnisse in zwei strings durch Anhängen von X und Y am Ende, Aber wenn das Letzte Zeichen X ist, ist dann nur ein string generiert werden können durch Anhängen von Y am Ende. Dieser gibt die Antwort
countX[i]
ist immercountY[i-1]
socountY[i]=countY[i-2]+countY[i-1]
... es ist im Grunde eine verschobene fibonacci-Folge und angesichts der Einschränkungen, sollte man BigInteger hier, wenn die java verwenden ...Verwenden Sie Rekursion. Ich bin mir nicht sicher über die Zeit, die Komplexität, da für die großen Eingang, es nimmt verdammt viel Zeit(tatsächlich hängt für große Werte). Für kleine Eingänge, die ich.e M < 10, so scheint es, Antworten zu geben.
ich würde vorschlagen, eine Logik hinter diesem. bedenkt, X 1 und Y mit 0.
010 101 000 100 001 sind die Fälle, in denen keine zwei 1 benachbart sind und die Summe=5.
return Ergebnis 5*5. So generieren binäre zahlen von 3 bits und erhöhen Sie die Anzahl für jede solche Zahl.
Dieses problem bezieht sich auf Permutationen und Kombinationen, insbesondere binomial-theorem. Umfang ist jene, die gut darin sind, können Sie mathemical Gleichung für dieses problem und dann ist es einfach für jeden M als Eingang in die Gleichung.
Aber mit coding, python-Lösung:
output-Instanz:
So, das löst das problem. Wenn es unerwartete Ausgabe für große M, bitte Kommentar posten.
Wenn wir mehrere test-Fälle, dann verwenden Sie diese Lösung:
Ich denke Rekursion wäre die beste Lösung für dieses problem.
Meine Idee ist, zu denken, über einen Baum, der gebildet werden kann, mit der Tiefe M, Bei der letzten Zählung die Anzahl der Blattknoten im Baum.
Das ist nur eine Idee, die Eigentliche Rekursion gestartet werden kann durch das denken, ob der erste Ort X oder nicht. Es kann sowohl X & Y nur, wenn es die Eltern(frühere Handlung) getroffen hat, Y. Aber, wenn es die Eltern genommen hat X, es kann nur in Y.
Mit dieser Idee machte ich eine Rekursion wie.
Und unsere Antwort wird sein, count*count.
Wieder können wir optimieren diese Rekursion durch die Pflege von doppelten Rekursion mithilfe von memoization
Ich denke, mit dieser Formel könnte die Antwort geben auf das problem
M-Abschnitte, die Gesamtzahl der möglichen Kombinationen von X und Y sind 2^M, aber wir ziehen den Fällen, in denen 1) Zwei X zusammen 2) Drei X sind zusammen 3) Vier X sind zusammen und so weiter...bis M X zusammen.
Count = 2^M - (1! + 2! + 3!.........M-1!)
Endgültige Antwort = Count*Count
Ich bin mir nicht sicher, ob dies die effizienteste Lösung, aber geht hier
Für einen gegebenen Wert m, so wird die gesamte Anzahl der erforderlichen Regelungen sind:
wenn beispielsweise m=7
ans= 7C1 + 6C2 + 5C3 + 4C4 ;