분석 ¶
f(n) = (n번 째 station까지 지나갈 때의 시간의 최솟값. n번 째 station은 반드시 방문)
g(n) = (n번 째 station을 방문 할 때 소요되는 시간)
문제에서는 n개의 station 정보(
f(0), ... f(n - 1)
)만 주지만, 마지막 station의 방문 소요 시간((f(n)
)을 0으로 기록해두자.n번 째 station에서 다른 station을 방문하지 않고 가장 뒤로 멀리 갈 수 있는 station을 m이라고 하면
f(n) = min(f(m), f(m + 1), ... f(n - 1)) + g(n)
이 성립한다.계산을 마치면
f(n)
이 답.주의사항으로는, 마지막 10번 input data는 자기 멋대로
\n
으로 중간에 input을 잘라버린다. 아래 코드처럼 line 단위로 입력을 받는 경우 터짐. 도블릿을 깝시다.코드(python3) ¶
10번 input data의 경우 dovelet에서 임의로 input에 대해 line wrap을 해버리기 때문에 입력을 제대로 받지 못해서 틀려버린다. 주의.
case_limit = int(input()) case_length = int(input()) case_distance = [int(x) for x in input().split()] + [0] case_time = [int(x) for x in input().split()] + [0] list_time = [0] for i in range(0, case_length + 1): distance = case_distance[i] left_index = i while left_index > 0 and distance + case_distance[left_index - 1] <= case_limit: left_index -= 1 distance += case_distance[left_index] list_time.append(min(list_time[left_index:i + 1]) + case_time[i]) print(list_time[-1])