백준

백준 11053

E재HO 2022. 2. 14. 19:00

#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;

이 두줄이 핵심이다.