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)

相关推荐
一个不知名程序员www44 分钟前
算法学习入门---二分查找(C++)
c++·算法
2301_807997381 小时前
代码随想录-day26
数据结构·c++·算法·leetcode
闭着眼睛学算法1 小时前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
TL滕1 小时前
从0开始学算法——第一天(认识算法)
数据结构·笔记·学习·算法
小欣加油1 小时前
leetcode 3318 计算子数组的x-sum I
c++·算法·leetcode·职场和发展
love is sour2 小时前
聚类(Clustering)详解:让机器自己发现数据结构
算法·支持向量机·聚类
烟袅2 小时前
LeetCode 142:环形链表 II —— 快慢指针定位环的起点(JavaScript)
前端·javascript·算法
CoovallyAIHub2 小时前
OCR战场再起风云:LightOnOCR-1B凭什么比DeepSeekOCR快1.7倍?(附演示开源地址)
深度学习·算法·计算机视觉
海琴烟Sunshine3 小时前
leetcode 190. 颠倒二进制位 python
python·算法·leetcode
Xの哲學3 小时前
Linux eMMC子系统深度解析:从硬件协议到内核实现
linux·网络·算法·架构·边缘计算