LeetCode 2140. 解决智力问题
可以注意到该题与打家劫舍有共通性。打家劫舍即为 brainpower 均为 1 的情况。
设 f[i] 为从第 i
个问题开始,到最后一个问题为止,所能获得的最高分数。 据此得出递推式:
f[i] = max(f[i+1], f[j] + questions[i][0]); 其中:j = min(i + questions[i][1] + 1, questions.size);
即:从后往前更新,f[i] 为不解决 i 和解决 i 并跳转到 j 两种决策的最大值。
代码如下:
class Solution {
public:long long mostPoints(vector<vector<int>>& questions) {int n = questions.size();vector<long long> f(n + 1);for (int i = n - 1; i >= 0; i--) {int j = min(i + questions[i][1] + 1, n);f[i] = max(f[i + 1], f[j] + questions[i][0]);}return f[0];}
};