leetcode 面试题17.16 按摩师

一、题目描述

二、解题思路

整体思路

可以采用动态规划的方法来解决这个问题,以i位置为起点:

(1)i==m-1或者i==m-2:最长服务时间为numsi

(2)否则,最长的服务时间为numsi+max(dpi+2,...,dpm-1);

注意:如果nums.size()==0,直接返回0,如果nums.size()==1,直接返回nums0即可。

具体思路

(1)dpij含义

dpi表示为i位置为起点的最长的时间。

(2)状态转移方程

1>i==m-1或者i==m-2:dpi=numsi;

2>否则,dpi=Max+numsi;Max为max(dpi+2,...,dpm-1)

(3)初始化

dpm-1=numsm-1,dpm-2=numsm-2

(4)填写顺序

从后往前开始填写,即从m-3位置往0位置填写。

(5)返回值

由于服务时间均为正数,所以**max(dp0,dp1)**即为所求。

三、代码实现

cpp 复制代码
class Solution {
public:
    int massage(vector<int>& nums) {
        //dp[i]为以i为起点的最长时间
        int m = nums.size();
        if(m==0) return 0;
        if(m==1) return nums[0];
        vector<int> dp(m,0);

        int Max = 0;
        for(int i=m-1;i>=0;i--){
            if(i <= m-3){
                Max = max(Max,dp[i+2]);
            } 
            if(i == m-1||i == m-2){
                dp[i] = nums[i];
            }
            else{
                dp[i] =Max+nums[i];
            }
        }
        return max(dp[0],dp[1]);
    }
};
相关推荐
_wyt00111 小时前
多重背包问题详解
c++·背包dp
Ljwuhe12 小时前
C++——多态
开发语言·c++
延凡科技12 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
越甲八千12 小时前
STL stack为何没有迭代器
c++
CV-Climber13 小时前
检索技术的实际应用
人工智能·算法
hhzz13 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_14 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸14 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
TsingtaoAI14 小时前
3D高斯泼溅技术发展及其在具身智能领域的应用综述
人工智能·算法·ai·具身智能·高斯泼溅
atunet14 小时前
关于图算法中的连通分量检测与最小割问题7
算法