cgy12306

[백준 BoJ] 14002 - 가장 긴 증가하는 부분 수열 4 본문

Algorithm/C++

[백준 BoJ] 14002 - 가장 긴 증가하는 부분 수열 4

cgy12306 2022. 1. 11. 18:52
// https://www.acmicpc.net/problem/14002
// 가장 긴 증가하는 부분 수열 4
#include<iostream>
#include<algorithm>
#include<vector>
int dp[1000002];
int arr[1000002];
using namespace std;

int main() {
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	vector<int> v;
	int N;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		cin >> arr[i];
	}

	dp[1] = 1;
	
	for (int i = 2; i <= N; i++) {
		for (int j = 1; j < i; j++) {
			if (arr[i] > arr[j]) dp[i] = max(dp[i], dp[j]);
		}
		dp[i]++;
	}

	int Max = 0, MaxIdx;

	for (int i = 1; i <= N; i++) {
		if (dp[i] > Max) {
			MaxIdx = i;
			Max = dp[i];
		}
	}

	cout << dp[MaxIdx] << "\n";
	int Maxcnt = dp[MaxIdx];
	for (int i = MaxIdx; i >= 1; i--) {
		if (dp[i] == Maxcnt) {
			v.push_back(arr[i]);
			Maxcnt--;
		}
	}
	sort(v.begin(), v.end());
	for (auto V : v) {
		cout << V << " ";
	}
}

'Algorithm > C++' 카테고리의 다른 글

[백준 BoJ] 17404 - RGB거리 2  (0) 2022.01.13
[백준 BoJ] 1149 - RGB의 거리  (0) 2022.01.12
[백준 BoJ] 1904 - 01타일  (0) 2022.01.11
[백준 BoJ] 15990 - 1, 2, 3 더하기 5  (0) 2022.01.10
[백준 BoJ] 1965 - 상자넣기  (0) 2022.01.10
Comments