646. Maximum Length of Pair Chain
Tags:
Interval dp pratice
Backtrack
class Solution:
    def findLongestChain(self, pairs: List[List[int]]) -> int:
        N = len(pairs)
        pairs.sort()
        start = [p[0] for p in pairs]
        @cache
        def backtrack(i):
            if i == N:
                return 0
            idx = bisect.bisect_left(start, pairs[i][1] + 1)
            res = max([
                1 + backtrack(idx),
                backtrack(i+1)
            ])
            return res
        return backtrack(0)
DP
class Solution:
    def findLongestChain(self, pairs: List[List[int]]) -> int:
        N = len(pairs)
        pairs.sort(key=lambda x:x[1])
        pairs = [[-2000, -1500]] + pairs
        ends = [p[1] for p in pairs]
        dp = [0] * (N+1)
        for i in range(1, N+1):
            dp[i] = dp[i-1]
            idx = bisect.bisect_left(ends, pairs[i][0])
            dp[i] = max(dp[i], dp[idx-1] + 1)
        return dp[-1]