1. 题目

一个有名的理发师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替理发师找到最优的预约集合(总预约时间最长),返回总的分钟数。

注意:本题相对原题稍作改动

示例 1:
输入: [1,2,3,1]
输出: 4
解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:
输入: [2,7,9,3,1]
输出: 12
解释: 选择 1 号预约、 3 号预约和 5 号预约,总时长 = 2 + 9 + 1 = 12。示例 3:
输入: [2,1,4,5,3,1,1,3]
输出: 12
解释: 选择 1 号预约、 3 号预约、 5 号预约和 8 号预约,总时长 = 2 + 4 + 3 + 3 = 12。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/the-masseuse-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[i] 表示第 i 次预约的 最长时间
  • 第 i 次预约,那么可以 + dp[i-2]
  • 第 i 次不预约,可以直接取 dp[i-1]
  • 所以转态转移方程:dp[i]=max⁡(dp[i−2]+nums[i],dp[i−1])dp[i] = \max(dp[i-2]+nums[i], dp[i-1])dp[i]=max(dp[i−2]+nums[i],dp[i−1])

类似题目:
LeetCode 198. 打家劫舍(DP)
LeetCode 213. 打家劫舍 II(DP)
LeetCode 337. 打家劫舍 III(记忆化+递归)

class Solution {public:int massage(vector<int>& nums) {int i, n = nums.size();if(n == 0) return 0;if(n == 1) return nums[0];int dp[n] = {0};dp[0] = nums[0];dp[1] = max(nums[0],nums[1]);for(i = 2; i < n; i++){dp[i] = max(dp[i-2]+nums[i], dp[i-1]);}return dp[n-1];}
};

程序员面试金典 - 面试题 17.16. 理发师(动态规划DP)相关推荐

  1. 程序员面试金典 - 面试题 17.08. 马戏团人塔(最长上升子序 DP/二分查找)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 二分查找 1. 题目 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上.出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一 ...

  2. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  3. 程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)

    1. 题目 两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度. 例如,{1, 5, 3} 和 {1, 7, 2, 3} ...

  4. 程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

    1. 题目 编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数. 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 ...

  5. 程序员面试金典 - 面试题 17.22. 单词转换(BFS)

    1. 题目 给定字典中的两个词,长度相等. 写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符. 每一步得到的新词都必须能在字典中找到. 编写一个程序,返回一个可能的转换序列.如有多个可能 ...

  6. 程序员面试金典 - 面试题 17.15. 最长单词(排序+递归)

    1. 题目 给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成. 若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串. ...

  7. [Leetcode][程序员面试金典][面试题17.13][JAVA][恢复空格][动态规划][Trie][字符串哈希]

    [问题描述][中等] [解答思路] 1. 动态规划 动态规划流程 第 1 步:设计状态 dp[i] 表示字符串的前 i 个字符的最少未匹配数. 第 2 步:状态转移方程 假设当前我们已经考虑完了前 i ...

  8. 程序员面试金典 - 面试题 17.25. 单词矩阵(Trie树+DFS回溯,hard)

    1. 题目 给定一份单词的清单,设计一个算法,创建由字母组成的面积最大的矩形,其中每一行组成一个单词(自左向右),每一列也组成一个单词(自上而下). 不要求这些单词在清单里连续出现,但要求所有行等长, ...

  9. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

最新文章

  1. transition属性值
  2. 微电子科学与工程要学计算机吗,微电子科学与工程专业适合女生学习吗
  3. Postman for Linux(x86)
  4. hdu3594 强连通 tarjan
  5. JavaScript - JavaScript自定义弹出对话框
  6. python入门区块链技术_区块链入门教程
  7. 陈丕宏:公司领导人对企业文化的影响
  8. mysql + IDEA + JDBC
  9. MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较
  10. jsp springmvc 视图解析器_Java面试题整理——SpringMVC
  11. java 中 Integer 比较 问题
  12. Sharepoint开发之旅(2):SiteDefinition自定义母版页
  13. HDOJ 1003:求一串数字中和最大的连续子串
  14. 杰瑞·卡普兰:人工智能并不可怕 未来将带来两大影响
  15. 超50万人推荐的神奇兼实用App,个个精品,打死也不能错过
  16. Python-练习 5 更多变量和打印
  17. 挑战华为社招:2021Java高级面试题汇总解答
  18. Excel VBA 金融建模 培训
  19. Spark-RDD实战影评数据分析一
  20. java调用ocr识别api_Java文字识别软件-调用百度ocr实现文字识别

热门文章

  1. Dev C++安装第三方库boost
  2. st官网下载stm32固件库方法
  3. C++成员函数重载、覆盖和隐藏的区别
  4. 三星+android+7.0+自动纠正单词,升级党必看!三星S/Note系列更新Android 7.0指南
  5. getAttribute实例例java_Java ExifInterface.getAttribute方法代码示例
  6. Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)
  7. Python 字符串 String 内建函数大全(1)
  8. python之file 方法
  9. centos关闭防火墙
  10. CI Weekly #11 | 微服务场景下的自动化测试与持续部署