Herausforderung Mit freundlicher Genehmigung meines University Code Challenge Contest
Die Abhängigkeit von Mobiltelefonen führt dazu, dass wir sie jede Nacht bis zum maximalen Ladezustand des Akkus aufladen, sodass wir nicht das Risiko eingehen, bis Mitte des nächsten Tages keinen Strom mehr zu haben. Es gibt sogar Leute, die, wenn sie tagsüber eine kostenlose Steckdose sehen, diese für das, was passieren kann, in Rechnung stellen.
Ich bin einer von denen.
Im Laufe der Jahre habe ich meine Technik verfeinert, um den Akku nicht jede Nacht maximal aufzuladen. Mit meinen bekannten Wiederholungsroutinen ist mir klar, zu welchen Tageszeiten ich diese Teilaufladungen durchführen kann (und wie viele Einheiten der Füllstand erhöht wird) und was den Batteriestand zwischen den einzelnen Ladevorgängen senkt. Mit diesen Daten berechne ich jede Nacht den Mindestbatteriestand, mit dem ich das Haus am nächsten Tag verlassen muss, damit er nie unter meine selbst auferlegte Schwelle von zwei Einheiten fällt.
Was ich noch nicht gemeistert habe, ist dieselbe Berechnung, wenn ich die etablierte Routine verlasse und mehrere Alternativen habe, um Dinge zu tun. Es passiert zum Beispiel an den Tagen, an denen ich auf dem Weg in eine andere Stadt bin, in die ich auf unterschiedliche Weise gelangen kann.
Bei meiner ersten Herangehensweise an das Problem gehe ich davon aus, dass ich mich um ein "Schachbrett" von der oberen linken Ecke zur unteren rechten Ecke bewegen möchte. In jeder "Zelle" kann ich dem Mobiltelefon entweder einen bestimmten Betrag aufladen oder ich kann nicht und sein Ladezustand sinkt.
Herausforderung
Geben Sie bei einer FxC-Matrix von Ganzzahlen den minimalen Batteriestand aus, den ich von der oberen linken Ecke nach rechts unten benötigen muss, ohne dass der Lastpegel jemals unter 2 Einheiten fällt.
In der Matrix gibt eine positive Zahl an, wie viel ich mein Mobiltelefon aufladen kann, bevor ich meinem Pfad folgen muss, während eine negative Zahl anzeigt, dass keine Steckdosen vorhanden sind und dass der Akku des Mobiltelefons seinen Ladezustand um diesen Betrag senkt. Es wird garantiert, dass die Mengen in den Quell- und Zielzellen (obere linke und untere rechte Ecke) immer 0 sind und dass der Rest der Werte (absoluter Wert) 100 nicht überschreitet.
Beispiel
:
Der Weg, den ich weniger Batterie brauche, ist:
Und der minimale Akkuladestand, den ich brauche, ist 4
Anmerkungen
- Der Start wird immer die obere linke Ecke sein
- Das Ende wird immer die untere rechte Ecke sein
- Sie können nicht zu einer Zelle gehen, die Sie bereits passiert haben. Beispiel: In Position (0,1) können Sie nicht zum Anfangspunkt (0,0) gehen.
- Ihr Akkuladestand kann (aus irgendeinem Grund) nicht unter 2 fallen
- Sie können davon ausgehen, dass es immer einen Anfang und ein Ende geben wird
- Sie können die eindimensionalen Arrays bei Bedarf als mehrdimensional verwenden
[1,2,3] == [[1,2,3]]
- Es kann mehrere korrekte Pfade (minimal benötigte Ladung) geben
- Ihr Ziel ist es, nur den niedrigsten benötigten Batteriestand auszugeben, nicht die Route
- Sie können nur vertikal und horizontal (nicht diagonal) gehen
Testfälle
[0, 0] => 2
[0, 1, 0] => 2
[0, -1, 0] => 3
[0, 15, -20, 5, 0] => 7
[[0, -3],[-5, 0]] => 5
[[0, -5, -9, 5], [-3, 5, 2, -2], [2, -4, -4, 0]] => 5
[[0, -1, 1, -1], [-1, -1, -1, -1], [-1, 1, -1, -1], [1, 1, -1, 0]] => 4
[[0,1,-1],[-9,-9,1],[-9,1,-1],[-9,-1,-9],[-9,1,0]]
0s
in der oberen linken Ecke und die andere in der unteren rechten Ecke