PS

LIS

Eastplanet 2021. 1. 28. 01:31

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int LIS(vector<int> arr, int index, int* dp) {
    int maxnum = 0;
    if (index == arr.size() - 1) {
        dp[index] = 1;
        return dp[index];
    }
    if (dp[index] == 0) {
        for (int i = index + 1; i < arr.size(); i++) {
            if (dp[i] != 0)maxnum = max(maxnum, dp[i]);
            else if (arr[index] < arr[i])maxnum = max(maxnum, LIS(arr, i, dp));
        }
        dp[index] = maxnum + 1;
        return dp[index];
    }
    return dp[index];
}






int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int c;
    cin >> c;
    while (c--) {
        int n;
        cin >> n;
        int* dp = new int[n];
        for (int i = 0; i < n; i++)dp[i] = 0;
        vector <int> arr;
        for (int i = 0; i < n; i++) {
            int mem;
            cin >> mem;
            arr.push_back(mem);
        }
        int mem = 0;
        for (int i = 0; i < arr.size(); i++) {
            mem = max(LIS(arr, i, dp), mem);
        }
        cout << mem << "\n";
        delete dp;
    }

}