반응형

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

 

2631번: 줄세우기

KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기

www.acmicpc.net

 

아이들을 번호순으로 오름차순 정렬시키는데 필요한 최소 이동 횟수를 구해야합니다.

아이들은 원하는 위치로 이동할 수 있고, 이미 세워진 아이들 중 일부는 이미 오름차순으로 정렬된 상태에 있습니다.

그러므로 주어진 번호에서 가장 긴 증가하는 부분 수열의 길이를 구해주면, 이 아이들은 이미 오름차순으로 정렬되어있으므로 그 순서를 유지해도 됩니다.

따라서, (전체 아이의 수 - 가장 긴 증가하는 부분 수열의 길이)번 만큼 아이들을 이동시켜주면 됩니다.

 

#include <iostream>
#include <algorithm>
using namespace std;

int n, m, arr[201], dp[201];

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &arr[i]);
	}
	for (int i = 1; i <= n; i++) {
		dp[i] = 1;
		for (int j = 1; j < i; j++) {
			if (arr[j] < arr[i]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
		m = max(m, dp[i]);
	}
	printf("%d", n - m);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 12852 : 1로 만들기 2  (0) 2021.11.18
백준 7570 : 줄 세우기  (0) 2021.11.18
백준 2098 : 외판원 순회  (0) 2021.11.18
백준 1311 : 할 일 정하기 1  (0) 2021.11.18
백준 1477 : 휴게소 세우기  (0) 2021.11.18

+ Recent posts