2140. Solving Questions With Brainpower (Medium) - TengnanYao/daily_leetcode GitHub Wiki

class Solution:
    def mostPoints(self, questions: List[List[int]]) -> int:
        # recursive
        @cache
        def dfs(i):
            if i >= len(questions):
                return 0
            return max(dfs(i + 1), questions[i][0] + dfs(i + questions[i][1] + 1))
        return dfs(0)
        
        # iterative
        n = len(questions)
        dp = [0] * 200001
        for i in range(n - 1, -1, -1):
            a, b = questions[i]
            dp[i] = max(dp[i + 1], dp[i + b + 1] + a)
        return dp[0]