https://www.acmicpc.net/problem/2631
단순하게 dp로 접근하기 보다는, 한가지 아이디어가 필요하다.
바로 LIS (최장 부분 증가 수열)이다.
어린이들의 이동 횟수가 최소가 되기 위해서는, 움직이지 않을, 즉 기준이 되는 어린이들을 잡을 필요가 있다.
어린이들의 정렬은 오름차순으로 이루어진다.
따라서 무작위로 섞여있는 어린이들의 번호 가운데에서, 오름차순으로 정렬된 최장 부분 수열을 찾아야한다.
그 부분 수열은 그대로 두고, 나머지 어린이들을 움직여주면 되겠다.
따라서 LSI의 길이를 전체 어린이의 수에서 빼주면 된다.
LIS를 구하는 알고리즘을 숙지하도록 하자.
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 1926번 그림 (C++) (0) | 2019.08.24 |
---|---|
백준 1012번 유기농 배추 (C++) (0) | 2019.08.24 |
백준 2178번 미로 탐색 (C++) (0) | 2019.08.24 |
백준 1158번 조세퍼스 문제 (C++) (0) | 2019.08.24 |
백준 11053번 가장 긴 증가하는 부분 수열 (C++) (0) | 2019.08.24 |