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

 

11722번: 가장 긴 감소하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10}  이고, 길이는 3이다.

www.acmicpc.net

더보기
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n;
    vector<int> arr;
    vector<int> dp;

    cin >> n;

    arr.resize(n + 1);
    dp.resize(n + 1);

    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
        dp[i] = 1;
    }
    
    dp[0] = 0;
    for (int i = 2; i <= n; i++) {
        for (int j = 1; j < i; j++) {
            if (arr[i] < arr[j]) {
                dp[i] = (dp[i] > dp[j] + 1 ? dp[i] : dp[j] + 1);
            }
        }
    }

    int mx = -1;
    for (int i = 1; i <= n; i++) {        
        if (mx < dp[i]) mx = dp[i];
    }    

    cout << mx;
}