私の大学コードチャレンジコンテストの許可を得てチャレンジ
私たちが携帯電話に依存しているため、毎晩バッテリーの最大レベルまで充電するので、翌日の途中で電力が不足するリスクはありません。日中に無料のコンセントを見て、何が起こったのかを充電する人もいます。
私もその一人です。
長年にわたって、私は毎晩バッテリーを最大に充電しないように私の技術を磨きました。私の完全に知られている反復的なルーチンにより、それらの部分的な再充電を実行できる時間帯(およびレベルが増加するユニット数)と、各充電の間にバッテリーレベルを低下させる原因は明らかです。これらのデータを使用して、毎晩、自分が課した2ユニットのしきい値を下回らないように、翌日家を出なければならない最小バッテリーレベルを計算します。
私がまだ何とかマスターしていないのは、私が確立されたルーチンを離れたときの同じ計算であり、物事を行うためのいくつかの選択肢があります。たとえば、私が別の方法で到着できる別の都市に行く途中の日に起こります。
問題への最初のアプローチでは、「チェス盤」を左上隅から右下隅に移動したいと想定しています。各「セル」で、携帯電話に特定の金額を充電するか、または充電できず、その負荷レベルが低下します。
チャレンジ
整数のFxC行列を指定して、負荷レベルが2ユニットを下回ることなく、左上隅から右下に移動するために必要な最小バッテリーレベル量を出力します。
マトリックスでは、正の数はパスをたどる前に携帯電話を充電できる量を示し、負の数はコンセントがなく、携帯電話のバッテリーがその量だけ充電レベルを下げていることを示します。ソースセルと宛先セル(左上隅と右下隅)の数量が常に0であり、残りの値(絶対値)が100を超えないことが保証されています。
指定例
:
私がより少ないバッテリーを必要とする道は:
そして、私が必要とする最小のバッテリーレベルの量は4です
ノート
- スタートは常に左上隅になります
- 終わりは常に右下隅になります
- すでに通過したセルには移動できません。例:位置(0,1)になると、最初の点(0,0)に移動できません
- バッテリーレベルが(何らかの理由で)2未満になることはありません
- あなたは常に始まりと終わりがあると仮定することができます
- 必要な場合は、1次元配列を多次元として使用できます
[1,2,3] == [[1,2,3]]
- 複数の正しい(最小限必要な充電)パスが存在する可能性があります
- あなたの目標は、ルートではなく、必要な最低の初期バッテリーレベルのみを出力することです
- 垂直方向と水平方向だけに行くことができます(斜めではありません)
テストケース
[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
1つは左上隅に配置され、もう1つは右