Okay, ich habe diese Aufgabe: Johns Badezimmerboden war kaputt. Wir haben eine Karte dieser Etage, wo '.' gute Platte ist, und ‚+‘ ist schlecht Platte, zum Beispiel:Fixing Floor Algorithmus
.+++
.+.+
Hier haben wir 5 gebrochene Platten haben, und drei gute. Es gibt zwei Arten von Platten, die im Laden verkauft werden: 1x1 Platten und 2x1 Platten. 1x1 Platte kostet A, und 2x1 Platte kostet B. Aufgabe ist: gegeben Karte des Bodens, zählen Mindestpreis der Bodenbefestigung.
Zum Beispiel oben: Wir können 2 2x1 Platten und 1 1x1 Platte platzieren. So wird der Preis A + 2 * B sein.
Ich habe eine Idee: für jede gebrochene Plattenanzahl maximale Länge der verbundenen gebrochenen Platten. Dann Preis ist Länge/2 * B + Länge% 2 * A.
Problem ist, dass ich wirklich nicht weiß, wie es geht. Ich habe eine Idee von einigen rekursiven Algorithmus, aber es gibt so viele Probleme wie Kreise:
+++
+.+
+++
Also ich habe zwei Fragen:
- Bin ich in die richtige Richtung?
- Können Sie mir Hinweise zur Implementierung dieses Algorithmus geben?
Vielen Dank!
EDIT
Es ist trivial Fall, wenn 2 * A < B, aber lassen Sie uns über nicht-trivial =)
/EDIT
Vielleicht wäre der Rucksack-Algorithmus inspirierend? http: //en.wikipedia.org/wiki/Knapsack_problem – csl
Du kannst damit anfangen zu beobachten, dass, wenn '2 * A <= B ', du nur 1x1 Kacheln brauchst. In jedem anderen Fall möchten Sie die Anzahl der 2x1-Kacheln maximieren. Die wahre Frage ist also: Was ist das Maximum von 2x1 Kacheln, die man in die kaputten Räume einbauen kann? – biziclop
Und hier ist ein Hinweis, der helfen kann: http://en.wikipedia.org/wiki/Mutilated_chessboard_problem – biziclop