Posts 2631 줄세우기
Post
Cancel

2631 줄세우기

알고리즘

  • LIS를 구하고, LIS를 구성하지 않는 요소들만 배치해주면 됨

  • LIS를 구하는 방법으론 n이 최대 200이니 O(n^2)을 써도 충분함

    • LIS 구하는 코드 O(n^2)

      • 이전 요소들 중에 자기보다 작은 것 중, 가장 큰 LIS를 가진 요소에 이어 붙임
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      for (int i = 1; i <= n; i++) {
      		save[i] = 1;
          
      		for (int j = 1; j < n; j++) {
      			if (nums[j] < nums[i])
      				save[i] = max(save[i], save[j] + 1);
      		}
      		ans = max(ans, save[i]);
      }
          
      

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>

using namespace std;


int n, nums[220], ans, save[220];
int max(int a, int b) {
	return a > b ? a : b;
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> nums[i];

	for (int i = 1; i <= n; i++) {
		save[i] = 1;

		for (int j = 1; j < n; j++) {
			if (nums[j] < nums[i])
				save[i] = max(save[i], save[j] + 1);
		}
		ans = max(ans, save[i]);
	}

	cout << n - ans;
}
This post is licensed under CC BY 4.0 by the author.

운영체제 개요

React) JS 다운로드 시간 동안의 로딩 화면

Comments powered by Disqus.