[BOJ/C++] 11722(가장 긴 감소하는 부분 수열)

푸른별·2023년 7월 1일
0

Algorithm

목록 보기
15/47
post-thumbnail

Link: https://www.acmicpc.net/problem/11722

  1. 수열의 증감 -> DP or Vector를 통한 정렬 문제 예상
  2. Vector를 통한 정렬은 감소하는 수열을 담을 필요가 없으니 DP로 풀이

2중 for문에서 i번째 dp값은 최솟값인 1 또는 이전의(j번째) dp값의 최댓값을 비교하여 구할 수 있습니다.
따라서 점화식은 다음과 같이 구성하였습니다.

  • DP[i] = max(DP[i], DP[j] + 1);

정답 코드

#include<iostream>
using namespace std;

int n, answer = 1;
int a[1001], dp[1001];

void input() {
	cin >> n;
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
		dp[i] = 1;
	}
}

void solution() {
	input();
	for (int i = 1; i < n; ++i) {
		for (int j = 0; j < i; ++j) {
			if (a[j] > a[i]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
		if (dp[i] > answer) answer = dp[i];
	}
	cout << answer;
}

int main() {
	cin.tie(0), cout.tie(0), ios_base::sync_with_stdio(0);
	solution();
	return 0;
}

profile
묵묵히 꾸준하게

0개의 댓글