대학 코드 챌린지 컨테스트의 허가를받은 챌린지
우리는 휴대 전화에 의존하여 매일 밤 최대 배터리 수준까지 충전하므로 다음날 중순까지 전원이 부족해질 위험이 없습니다. 낮에 무료 콘센트를 볼 때 발생할 수있는 일에 대해 요금을 청구하는 사람들도 있습니다.
나는 그들 중 하나입니다.
수년에 걸쳐, 나는 매일 밤 배터리를 최대로 충전하지 않도록 기술을 개선했습니다. 완벽하게 알려진 반복 루틴을 통해 하루 중 몇 시간 동안 부분 재충전을 수행 할 수 있는지 (및 레벨이 증가하는 단위 수) 각 충전 사이의 배터리 수준을 낮추는 방법이 명확합니다. 이 데이터를 사용하여 매일 밤 나는 다음 날 집을 떠나야하는 최소 배터리 수준을 계산하여 자체적으로 부과 한 두 단위 임계 값 아래로 떨어지지 않도록합니다.
내가 아직 마스터하지 않은 것은 확립 된 루틴을 떠날 때와 동일한 계산이며 수행 할 몇 가지 대안이 있습니다. 예를 들어, 다른 방법으로 도착할 수있는 다른 도시로가는 날에 발생합니다.
문제에 대한 첫 번째 접근 방식에서는 왼쪽 상단 모서리에서 오른쪽 하단 모서리까지 "체스 판"주위를 이동하고 싶다고 가정합니다. 각 "셀"에서 모바일을 특정 금액으로 충전 할 수 없거나,로드 할 수없고로드 레벨이 떨어집니다.
도전
정수의 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
좌측 상단에 하나는 오른쪽 아래에 다른 하나 배치