按摩师问题

问题描述:

一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接

在每次预约服务之间要有休息时间,因此她不能接受相邻的预约

给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/the-masseuse-lcci

思路:

本次使用的解法是动态规划法。我对这个算法的简单理解是在递归解决相似子问题时,记录子问题的解。因为解决后面的子问题需要用到前一个子问题的解。

当数组nums为空数组时,说明无委托,此时时间为0,直接返回0即可

当nums中只有1个委托时,直接返回该委托所需要的时间即可

当nums中的委托>=2时,将存放子问题解的数组sta初始化后进行讨论:

  委托=1,sta[1]=nums[1]

  委托=2,sta[2]=max(nums[1],nums[2]),即在两个委托中选择时间长的一个

  委托>2,sta[i]=max(sta[i-1],(sta[i-2]+num[i])),判断接不接第i个委托的哪个时间长,选择长的时间记录在sta[i]中

    sta[i-1]:是指不接第i个委托的时间

    sta[i-2]+nums[i]:是指接第i个委托,因为i和i-1的委托不能同时接,因此接第i-2个委托+第i个委托所需要的时间

代码:

 以上,希望对各位有所帮助

200324 Rewivy

猜你喜欢

转载自www.cnblogs.com/rewivy/p/12563085.html