알고리즘/다이나믹2016. 8. 19. 09:07
반응형


정올 Q1492 자동차 경주 대회

고려사항

1. 한번에 최대 이동거리 제한

2. 이동 경로 추적 필요

3. 이동 카운트 계산 필요

문제 풀이

​다이나믹의 경우 점화 식을 세워 푸는 문제와 분할 정복 문제로 나뉜다고 느껴진다.

이 문제의 경우 후자에 속하며 f(0)부터 f(n)까지 각 포인트에서 최소 시간을 구하며 나가는 것이 문제를 해결하는 방법이라 생각한다.


내가 사용한 방법으로 설명해 본다.

f(0) = 0​

f(0)의 경우 start 포인트를 뜻한다. 최소 비용은 0이된다.

f(1) = 5

f(1)의 경우​ start에서 point 1 까지 가는 방법이 1가지 이므로 최소비용은 5.

f(2) = 10​

2가지 경우의 수가 존재한다. ​

1. 0에서 2까지 한번에 이동하는 경우(즉 f(0)+point2의 시간, 0+10=10)

2. 1에서 2까지 한번에 이동하는 경우(f(1)+point2의 시간, 5+10=15)​

1,2번의 경우에서 최소값을 구하고 f(2)에 넣는다. 2번이 최소값이 므로 ​f(2)=10

f(3) = 9

3가지 경우의 수가 존재한다.

1. 0에서 3까지 이동하는경우(f(0)+point3의 시간)

하지​만 1번의 경우 최대 이동거리를 초과한다. 100+30+100>140, 1번은 불가

2. 1에서 3까지 이동하는경우(f(1)+point3의 시간, 5+4=9)

3. 2에서 3까지 이동하는경우​(f(2)+point3의 시간, 10+4=14)

​2,3 번중 최소값을 구해 f(3)에 넣는다.

위와 같은 방식으로 마지막 위치까지 f를 구하면 최종위치에 도착하는 방법과 ​최소 시간을 구할 수 있다.

코드내 자세한 주석이 설명되어 있다.​


분할 정복 문제의 경우 작은 부분에서 각각을 채워나가며 구한다. 점화식을 필요로하는 다이나믹 문제보다 쉽게 느껴진다.

반응형

'알고리즘 > 다이나믹' 카테고리의 다른 글

정올 Q1871 줄세우기  (2) 2016.09.02
정올 Q1407 숫자카드  (0) 2016.08.30
정올 Q2000 동전 교환  (0) 2016.08.28
정올 Q1539 가장 높은 탑 쌓기  (0) 2016.08.26
정올 Q1848 극장좌석  (0) 2016.08.26
Posted by 조던발바닥