---
# System prepended metadata

title: 2140. Solving Questions With Brainpower
tags: [Leetcode, Dynamic Programming, Medium]

---

# 2140. Solving Questions With Brainpower
###### tags: `Leetcode` `Medium` `Dynamic Programming`
Link: https://leetcode.com/problems/solving-questions-with-brainpower/
## 思路 $O(N)$ $O(N)$
For each index $i$ we have 2 options:

- Take $points_i$ and jump the next $brainpower_i$ indexes
- Skip the current index(do not collect $points_i$) and move to the next index
We need to find the maximum points we can collect given the above mentioned constraints

Note: $dp[i]$ denotes the max points that can be collected for the subarray: $questions_{[i... questions.size() - 1]}$. So we only need to compute it once for each $i$


## Code
```java=
class Solution {
    public long mostPoints(int[][] questions) {
        int n = questions.length;
        long[] dp = new long[questions.length+1];
        for(int i = questions.length-1;i >= 0;i--){
            dp[i] = Math.max(questions[i][0]+dp[Math.min(i+questions[i][1]+1,n)], dp[i+1]);
        }
        return dp[0];
    }
}
```