2140、解决智力问题

题目

解答

正向不好做,反向遍历。

定义:dp[i] [i,n)的分数

初始化:dp[n]=0

递推:dp[i]=max(dp[i+1],questions[i][0]+dp[i+questions[i][1]+1]) 如果越界了,就截断到dp[n]

最后return dp[0]即可

cpp 复制代码
class Solution {
public:
    long long mostPoints(vector<vector<int>>& questions) {
        int n = questions.size();
        //定义dp[i]:[i,n)的分数
        //dp[i]=max(dp[i+1],questions[i][0]+dp[i+questions[i][1]+1])
        //如果i+questions[i][1]>=n 则dp[i]=max(dp[i+1],questions[i][0])
        vector<long long> dp(n+1);
        dp[n] = 0;
        for(int i=n-1;i>=0;i--){
            if(i+questions[i][1]>=n)
                dp[i]=max(dp[i+1],(long long)questions[i][0]);
            else
                dp[i]=max(dp[i+1],(long long)questions[i][0]+dp[i+1+questions[i][1]]);
        }
        return dp[0];
    }
};

时间复杂度O(n)

空间复杂度O(n)

相关推荐
zmuy19 分钟前
114. 二叉树展开为链表
数据结构·链表
巴基海贼王37 分钟前
针对数据仓库方向的大数据算法工程师面试经验总结
大数据·数据仓库·算法
激进小猪100238 分钟前
Python算法笔记1_双指针问题
笔记·python·算法
逼得大师天才1 小时前
2024计算机二级Python真题精讲|第一套(易错点分析)
算法
愚润求学1 小时前
【递归,搜索与回溯算法】记忆化搜索(二)
linux·c++·算法·leetcode
谢道韫6661 小时前
46- 赎金信
算法
csuzhucong2 小时前
扫雷中的数学原理
算法
Mars-xq2 小时前
算法 : 把数字翻译成字符串
算法
YU_admin2 小时前
Java:常见算法
java·数据结构·算法