-
K번째 LIS 구하기 (KLIS) :: 알고스팟알고리즘 풀이/알고리즘 해결전략 연습 2019. 9. 24. 23:08
문제 : https://algospot.com/judge/problem/read/KLIS
문제
어떤 정수 수열에서 0개 이상의 숫자를 지우면 이 수열의 부분 수열 (subsequence) 를 얻을 수 있다. 예를 들어 10 7 4 9 의 부분 수열에는 7 4 9, 10 4, 10 9 등이 있다. 단, 10 4 7 은 원래 수열의 순서와 다르므로 10 7 4 9 의 부분 수열이 아니다.
어떤 부분 수열이 _단조 증가_할 때 이 부분 수열을 증가 부분 수열 (increasing subsequence) 라고 하며, 이 중 가장 긴 것을 최대 증가 부분 수열 (LIS, longest increasing subsequence) 라고 한다. 예를 들어, 5 20 21 22 8 9 10 의 최대 증가 부분 수열은 5 8 9 10 이다.
어떤 수열에는 LIS 가 두 개 이상 있을 수 있다. 예를 들어, 4 5 6 1 2 3 의 LIS 는 두 개가 있다.
모든 숫자가 서로 다른 (중복 숫자가 없는) 수열이 주어질 때, 이 수열의 LIS 중 사전 순서대로 맨 앞에서 k번째 있는 LIS 를 출력하는 프로그램을 작성하시오.
코드 ( C++ ) 종만북 참조
'알고리즘 풀이 > 알고리즘 해결전략 연습' 카테고리의 다른 글
모스 부호 사전 (MORSE) :: 알고스팟 (31) 2019.09.23 두니발 박사의 탈옥 :: 알고스팟 (31) 2019.09.16 POLY 폴리오미노 :: 알고스팟 (31) 2019.09.13 캐나다 여행 :: 알고스팟 (0) 2019.09.08 남극 기지 :: 알고스팟 (0) 2019.09.07