더블릿
30 계단 | 옥 상 | 제출 현황 | Ranking | FAQs | 오류보고 | QandA | 푼   후 | 자유게시판 |
 
koi_commute 대회 풀이
삭제 | 편집 | 답글

이 문제는 수직선상에 있는  개의 아파트 단지들에 사는 학생들을 통학버스 한 대를 사용하여 학교로 이동시킬 때 버스 이동 거리 총합의 최소값을 구하는 문제이다. 이는 통학버스 한 번을 운행할 때 최적의 전략을 사용하여 해결 가능하다.


  학교를 지나가는 버스는 항상 학생들을 학교에 내려주고 가는 것이 좋기 때문에 학교를 기준으로 왼쪽에 있는 가구들과 오른쪽에 있는 가구들에 대해 답을 독립적으로 구할 수 있기 때문에 편의상 개의 가구들이 모두 학교 오른편에 있다고 가정하고, 학교의 위치가 으로 주어졌다고 하자. 번째 가구의 위치와 학생 수를 각각  라 하고 모든 들은 오름차순이라고 가정한다. 가장 멀리 사는 학생들부터 (번째 가구의 학생들부터) 시작하여 돌아오는 길에 가능한 한 많은 학생들을 데리고 오는 방법이 최적이다. 그 이유는 다음과 같다.


 가 세 아파트 단지의 번호라고 하자. 버스를 두 번 이상 운행하는데 두 버스 모두 를 방문한다고 하면 첫 번째 버스가 에서 태워오는 학생들과 두 번째 버스가 에서 태워오는 학생들을 교환했을 때, 이동 거리의 총합은 증가하지 않는다. 또한, 첫 번째 버스가 를 방문하고, 두 번째 버스가 를 방문한다고 하자. 이 때 역시 첫 번째 버스가 에서 태워오는 학생들과 두 번째 버스가에서 태워오는 학생들을 교환했을 때, 이동 거리의 총합은 증가하지 않는다. 한 최적해가 주어졌을 때, 이를 위의 두 가지 변환을 연속적으로 이용하면 위에서 설명한 규칙을 만족하는 해를 구할 수 있는데, 이 변환이 이동 거리의 총합을 증가시키지 않으므로 이렇게 변환된 해 역시 최적임을 알 수 있다.


 이 30,000까지 커질 수 있기 때문에 위의 해를 구현하기 위해서는  의 시간복잡도를 가지는 정렬 알고리즘을 사용해야 한다.

 
2012-07-31 14:36 , testid
[previous]