#2140 解决智力问题(动态规划)

2140. 解决智力问题 - 力扣(LeetCode)

也许是智力问题罢!

从前向后是错误的,因为dp无法继承/表明brianpower(i),导致结果可能偏大。

从后往前是正确的,因为这样能确保一定不会导致活动出现在brainpower中,

class Solution {
public:
    long long mostPoints(vector<vector<int>>& questions) {
        int N=questions.size();
        vector<long long> dp(N+1,0);
        dp[N]=0;
        for(int i=N-1;i>=0;i--){
            long long lastsc=0;
            if(i+questions[i][1]+1<N) lastsc=dp[i+questions[i][1]+1];
            if(dp[i+1]>lastsc+questions[i][0]) dp[i]=dp[i+1];
            else dp[i]=lastsc+questions[i][0];
        }
        return dp[0];
    }
};