CCCPaste

Untitled

class Solution {
public:
    vector v;
    int n;
    int dp[2505];
    int rec(int at) {
        if(dp[at] != -1) {
            return dp[at];
        }
        
        int result = 1;
        for(int i = at + 1; i < n; i++) {
            if(v[at] < v[i]) {
                result = max(result, rec(i) + 1);
            }
        }
        return dp[at] = result;
    }
    int lengthOfLIS(vector nums) {
        v = nums;
        n = (int) v.size();
        int result = 0;
        for(int i = 0; i < n; i++) {
            dp[i] = -1;
        }
        for(int i = 0; i < n; i++) {
            result = max(result, rec(i));
        }
        return result;
    }
};