백준

백준 4198 - 열차정열

황태건 2023. 8. 9. 15:08

사실 열차정렬입니다.

https://www.acmicpc.net/problem/4198

 

4198번: 열차정렬

에린은 엔지니어이자, 기차를 운전하는 기관사입니다. 또한 그녀는 각 열차를 구성하는 차량을 배열하는 일도 합니다. 그녀는 차량들을 정렬할 때, 열차의 전면에 가장 무거운 차량을 놓고, 후

www.acmicpc.net

이 문제는 아래 문제를 풀고나서 접한다면 뭔가 느낌 오는 게 있을 것이다. 아니면 적어도 LIS 문제라도 풀고 접하는 편을 추천한다.

 

가장 긴 바이토닉 부분 수열 https://www.acmicpc.net/problem/11054

 

내가 처음에 긴가민가했던 이유는, 예시 입력 데이터가 너무 단순했기 때문이라고 핑계를 대고 싶다.

다음의 입력 데이터를 보자. (차량 수 N은 생략)

 

5 3 1 7 8

 

짱구를 약간만 굴려보면 이런 식의 열차를 만들 수 있다.

8 7 5 3 1

 

아래의 데이터들에서도 동일한 열차를 만들 수 있을 것이다.

5 3 7 8 1  /  5 7 8 3 1

 

그러나 이런 데이터에서는 위 열차를 만들 수 없다.

5 3 1 8 7  /  5 1 3 7 8

 

이 데이터들의 차이점은 무엇일까?

유효한 위쪽 데이터들은 일부 원소의 순서가 바뀌더라도, 첫 원소 5에서 시작하는 IS(증가 부분수열)와 DS(감소 부분수열)가 유지된다.

 

5 3 7 8 1  /  5 7 8 3 1

 

하지만 아래 데이터들은 원소의 위치가 바뀌어 IS와 DS 길이가 감소한다.

5 3 1 8 7  /  5 1 3 7 8

 

결론적으로, 입력 데이터로 만들 수 있는 열차의 길이는 각 원소에서 시작하는 L(longest)IS와 LDS의 길이 합들 중 최댓값이다! 물론 합에서 1을 빼야한다. 이제 dp 알고리즘을 이용해 간단하게 문제를 풀 수 있을 것이다.