빚 청산
시간 제한1초메모리 제한128 MB
1번부터 N번 위치에 선 친구들이 각각 빚이나 채권을 가지고 있고, 베시는 0에서 빈손으로 출발해 현금이 음수가 되지 않게 하면서 N에서 끝나야 한다. 모든 채권과 채무를 정산하는 최소 이동 거리를 구한다.
문제
Bessie는 ()명의 친구 각각과 돈을 빌리거나 빌려주었습니다. 친구에게는 부터 까지 번호가 매겨져 있습니다.
드디어 빚을 갚는 날이 되었습니다. Bessie가 받을 돈의 합이 갚아야 할 돈의 합보다 많습니다. 친구들은 일직선으로 서 있으며, 번 친구는 헛간에서 미터 떨어진 곳에 서 있습니다. Bessie는 헛간(위치 )에서 출발해 줄을 따라 걸으며, 자신에게 빚진 친구에게서 돈을 받고, 자신이 빚진 친구에게 돈을 갚습니다.
각 친구 에는 정수 (, )가 주어집니다. 이면 번 친구가 Bessie에게 만큼 빚진 것이고, 이면 Bessie가 번 친구에게 만큼 빚진 것입니다.
Bessie는 자신에게 빚진 친구를 지날 때 그 돈을 즉시 받을 수 있습니다. 하지만 자신이 빚진 친구에게는 현재 들고 있는 현금이 갚을 금액 이상일 때에만 갚을 수 있습니다(들고 있는 현금은 결코 음수가 될 수 없습니다). 어떤 친구에게 처음 도착했을 때 갚을 현금이 부족할 수 있으므로, 그 친구를 지나쳐 더 앞에서 돈을 받은 뒤 다시 돌아와 갚아야 할 수도 있습니다.
Bessie는 헛간(위치 )에서 출발하여 줄의 맨 끝(위치 )에서 여정을 마쳐야 합니다. 모든 거래를 끝내기 위해 이동해야 하는 최소 총 거리는 얼마입니까?
입력
- 첫째 줄: 정수 .
- 둘째 줄부터 번째 줄까지: 번째 줄에는 정수 가 주어집니다.
출력
- 첫째 줄: Bessie가 모든 친구에게서 돈을 받고 갚기 위해 이동해야 하는 최소 총 거리를 나타내는 정수 하나.
힌트
예시에서 다섯 친구는 위치 부터 까지 서 있고, 각각의 값은 입니다.
- 헛간에서 오른쪽으로 걸어 번 친구에게서 을 받습니다(현재 ).
- 번 친구에게는 을 갚아야 하지만 현재 뿐이므로 지나칩니다. 번 친구까지 가서 을 받습니다(현재 ).
- 다시 번 친구에게 돌아와 을 갚습니다(현재 ).
- 다시 오른쪽으로 걸어 번 친구(을 갚아야 하지만 현재 뿐)를 지나치고 번 친구에게서 을 받습니다(현재 ).
- 번 친구에게 돌아와 을 갚고(현재 ), 줄의 맨 끝으로 돌아와 여정을 마칩니다.
이동 거리는 입니다.