Link: https://www.acmicpc.net/problem/11722
- 수열의 증감 -> DP or Vector를 통한 정렬 문제 예상
- Vector를 통한 정렬은 감소하는 수열을 담을 필요가 없으니 DP로 풀이
2중 for문에서 i번째 dp값은 최솟값인 1 또는 이전의(j번째) dp값의 최댓값을 비교하여 구할 수 있습니다.
따라서 점화식은 다음과 같이 구성하였습니다.
정답 코드
#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;
}