[Leetcode] Käselabyrinth-Problem

Zeitlimit: 3000MS

Speicherlimit: 589824 KB

Titel Beschreibung:

Eine schlaue Maus entdeckte ein dreieckiges Käselabyrinth. Dieses Labyrinth besteht aus mehreren kleinen Räumen und in jedem kleinen Raum befinden sich mehrere gleich große kleine Käsesorten (in jedem Raum befindet sich mindestens ein Stück Käse). Der Aufbau des Käselabyrinths ist wie folgt: (1) Das Käselabyrinth hat insgesamt N Reihen. Es gibt einen kleinen Raum in der ersten Reihe, zwei Räume in der zweiten Reihe, drei kleine Räume in der dritten Reihe, ... Es gibt N kleine Räume in der N-ten Reihe. (2) Alle kleinen Räume sind ab der ersten Spalte angeordnet. (3) Der Eingang zum Käselabyrinth ist der kleine Raum in Reihe 1. (4) Aufgrund der besonderen Struktur des Käselabyrinths darf die Maus, nachdem sie einen Raum betreten hat, weder in den Raum im Obergeschoss noch in den Raum auf der linken Seite zurückkehren, sondern nur in den Raum auf der rechten Seite oder darunter. (5) Im letzten Stockwerk des Käselabyrinths hat jeder Raum eine Tür, die zum Ausgang des Labyrinths führt, und der kleine Raum im letzten Stockwerk hat keine Türen, die zu den kleinen Räumen links und rechts führen. Jetzt weiß die kleine Maus, wie viele Käsestücke sich in jedem kleinen Raum befinden, und sie hat einen Weg gefunden, der vom Eingang zum Ausgang führt und den meisten Käse bekommt. Können Sie ein Programm schreiben, das die maximale Anzahl an Käsestücken ausgibt, die die Maus erreichen kann?

Beschreibung eingeben

Einzelner Satz Eingaben. Zeile 1 gibt eine positive ganze Zahl N ein, die die Anzahl der Zeilen im Käselabyrinth angibt, N<=100. In den nächsten N Zeilen hat die erste Zeile 1 positive ganze Zahl, die die Anzahl der kleinen Käsesorten in einem kleinen Raum in der ersten Zeile angibt; die zweite Zeile hat 2 positive ganze Zahlen, die die Anzahl der kleinen Käsesorten in den beiden kleinen Räumen in der zweiten Zeile angibt; ...; die N-te Zeile hat N positive ganze Zahlen, die die Anzahl der kleinen Käsesorten in den N kleinen Räumen in der N-ten Zeile angibt. Die Anzahl der kleinen Käsesorten in jedem Raum überschreitet nicht 1000. Zwei positive ganze Zahlen in jeder Zeile werden durch englische Leerzeichen getrennt.

Ausgabebeschreibung

Geben Sie die maximale Anzahl kleiner Käsestücke aus, die die Maus bekommen kann.

Beispieleingabe

3

2

4 5

1 2 3

Beispielausgabe

13

Lösung

Der Titel beschreibt ein Käselabyrinthproblem, bei dem es darum geht, einen Weg vom Eingang zum Ausgang des Labyrinths zu finden, sodass die Anzahl der Käse, die den Weg passieren, am größten ist.

Dies ist ein dynamisches Programmierproblem, und ein zweidimensionales Array dp kann verwendet werden, um die maximale Käsemenge an jedem Standort aufzuzeichnen. dp[i][j] stellt die maximale Käsemenge dar, die erhalten werden kann, wenn man von Zeile 1, Spalte 1 des Labyrinths zu Zeile i, Spalte j gelangt. Der Anfangszustand ist dp[1][1] = Käse[1][1], also ausgehend von der Eingangsposition.

Dann können Sie für jede Position dp[i][j] gemäß den im Titel geforderten Bewegungsregeln einen größeren Wert aus dp[i-1][j-1] und dp[i-1][j] in der vorherigen Zeile plus der Menge an Käsekäse[i][j] an der aktuellen Position auswählen, um den Maximalwert von dp[i][j] zu erhalten. Das heißt, dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + Käse[i][j].

Ermitteln Sie abschließend den Maximalwert aus dem dp-Array in der letzten Zeile. Dies ist die maximale Käsemenge, die die Maus erhalten kann.

Hier ist der mit Python implementierte Code:

def max_cheese(N, cheese):
    dp = [[0] * (N+1) for _ in range(N+1)]
    dp[1][1] = cheese[0][0]
    for i in range(2, N+1):
        for j in range(1, i+1):
            dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + cheese[i-1][j-1]
    return max(dp[N])

N = int(input())
cheese = []
for _ in range(N):
    row = list(map(int, input().split()))
    cheese.append(row)
result = max_cheese(N, cheese)
print(result)

Beachten Sie, dass die Anzahl der eingegebenen Käsesorten in der Käseliste gespeichert werden muss und bei der Berechnung von dp[i][j] Käse[i-1][j-1] verwendet wird, um die Anzahl der Käsesorten in Zeile i und Spalte j darzustellen.

Auf diese Weise kann der Code die maximale Käsemenge, die die Maus erhalten kann, korrekt berechnen und ausgeben, sodass sie den Test und die AC bestehen kann.

Supongo que te gusta

Origin blog.csdn.net/dsafefvf/article/details/131380417
Recomendado
Clasificación