Défi relevé avec la permission de mon concours University Code Challenge
La dépendance que nous avons sur les téléphones portables nous fait les recharger tous les soirs jusqu'au niveau maximum de la batterie, donc nous ne courons pas le risque de manquer d'énergie au milieu du lendemain. Il y a même des gens qui, lorsqu'ils voient une prise gratuite pendant la journée, la font payer pour ce qui peut arriver.
Je suis l'un d'eux.
Au fil des années, j'ai affiné ma technique pour ne pas charger la batterie au maximum chaque nuit. Avec mes routines répétitives parfaitement connues, je sais clairement à quelles heures de la journée je pourrai effectuer ces recharges partielles (et combien d'unités le niveau augmentera) et ce qui abaisse le niveau de la batterie entre chaque charge. Avec ces données, chaque nuit, je calcule le niveau de batterie minimum avec lequel je dois quitter la maison le lendemain pour qu'il ne tombe jamais en dessous de mon seuil auto-imposé de deux unités.
Ce que je n'ai pas encore réussi à maîtriser, c'est ce même calcul quand je quitte la routine établie et j'ai plusieurs alternatives pour faire les choses. Cela arrive, par exemple, les jours où je suis en route vers une autre ville où je peux arriver de différentes manières.
Dans ma première approche du problème, je suppose que je veux me déplacer autour d'un "échiquier", du coin supérieur gauche au coin inférieur droit. Dans chaque "cellule", je peux soit charger le mobile d'un montant spécifique, soit je ne peux pas et son niveau de charge diminue.
Défi
Étant donné une matrice FxC d'entiers, produisez le niveau de batterie minimal dont j'ai besoin pour passer du coin supérieur gauche au coin inférieur droit sans que le niveau de charge ne tombe en dessous de 2 unités.
Dans la matrice, un nombre positif indique combien je peux charger mon téléphone portable avant de devoir reprendre mon chemin, tandis qu'un nombre négatif indique qu'il n'y a pas de prises et que la batterie du mobile baisse son niveau de charge de ce montant. Il est garanti que les quantités dans les cellules source et destination (coin supérieur gauche et coin inférieur droit) sont toujours égales à 0 et que le reste des valeurs (valeur absolue) ne dépasse pas 100.
Exemple
donné:
Le chemin dont j'ai besoin de moins de batterie est:
Et le niveau minimal de batterie dont j'ai besoin est de 4
Remarques
- Le départ sera toujours le coin supérieur gauche
- La fin sera toujours le coin inférieur droit
- Vous ne pouvez pas vous rendre dans une cellule que vous avez déjà dépassée. Exemple: une fois en position (0,1), vous ne pouvez pas aller au point initial (0,0)
- Votre niveau de batterie ne peut pas (pour une raison quelconque) descendre sous 2
- Vous pouvez supposer qu'il y aura toujours un début et une fin
- Vous pouvez prendre les tableaux unidimensionnels comme multidimensionnels si vous avez besoin de
[1,2,3] == [[1,2,3]]
- Il peut y avoir plusieurs chemins corrects (charge minimale nécessaire)
- Votre objectif est de produire uniquement le niveau de batterie initial le plus bas nécessaire, pas l'itinéraire
- Vous ne pouvez aller que verticalement et horizontalement (pas en diagonale)
Cas de test
[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
placés l'un dans le coin supérieur gauche et l'autre en bas à droite