728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
첫째 줄에는 아이들의 수 N이 주어진다. 둘째 줄부터는 1부터 N까지의 숫자가 한 줄에 하나씩 주어진다. N은 2 이상 200 이하의 정수이다.
출력
첫째 줄에는 번호 순서대로 줄을 세우는데 옮겨지는 아이들의 최소 수를 출력한다.
소스코드
#include <iostream> using namespace std; int main(void) { int n, max, arr[201] = { 0, }, dp[201] = { 0, }; cin >> n; for (int i = 1; i <= n; i++) cin >> arr[i]; for (int i = 1; i <= n; i++) for (int j = 1; j < i; j++) if (arr[j] < arr[i]) dp[i] = dp[i] < (dp[j] + 1) ? (dp[j] + 1) : dp[i]; max = -1; for (int i = 1; i <= n; i++) max = max < dp[i] ? dp[i] : max; cout << n - max - 1; }
Tip
LIS 문제로 문제의 크기 자체가 크지 않기 때문에 이분 탐색을 이용하지 않는 방식의 DP를 사용했다.
n-LIS인 이유는 해당 LIS에 끼워넣는 방식이 최소 이동을 보장하기 때문이다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 10474 - 분수 좋아해?(ACM-ICPC Regional) (0) | 2018.03.03 |
---|---|
백준] 10158 - 개미(KOI 2014 지역본선) (0) | 2018.02.21 |
백준] 8979 - 올림픽(KOI 2013) (0) | 2018.02.11 |
백준] 8974 - 희주의 수학시험 (0) | 2018.02.07 |
백준] 5554 - 심부름 가는 길(JOI 2011 예선) (0) | 2018.02.05 |