#include <iostream>
#include <algorithm>
using namespace std;
int N;
int DP[1001];
int arr[1001] = { 0, };
int main() {
cin >> N;
int max = 0;
for (int i = 1; i <= N; i++)
cin >> arr[i];
for (int i = 1; i <= N; ++i) {
for (int j = 0; j <= i; ++j) {
if(arr[i]>arr[j] && DP[j]+1 > DP[i])
DP[i] = DP[j] + 1;
}
if (max < DP[i]) {
max = DP[i];
}
}
cout << max;
return 0;
}
백준 최장 부분증가수열을 구하는 문제이다.
DP 배열에 하나씩 비교해보면서 값을 넣어주면된다.
DP[10]번째를 구하려면 DP[0~9]까지의 배열과 모두 비교를 해봐야한다.
if(arr[i]>arr[j] && DP[j]+1 > DP[i])
DP[i] = DP[j] + 1;
이 두줄이 핵심이다.
'백준' 카테고리의 다른 글
백준 2193 : 이친수 (0) | 2022.02.15 |
---|---|
백준 10844 :쉬운 계단 수 (0) | 2022.02.15 |
백준 : 포도주 시식 , 계단 오르기 (2) | 2022.02.12 |
백준 1149 : RGB 거리 (2) | 2022.02.11 |
백준 11726 : 2xn타일링 (2) | 2022.02.10 |