题目:https://leetcode-cn.com/problems/the-masseuse-lcci/
一个有名的按mo师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按mo师找到最优的预约集合(总预约时间最长),返回总的分钟数。
示例 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。
通过次数
解题:
定义状态
f(n)为若一共为n个预约,一定选中第n个预约的最长总预约时间(该时间非所有预约序列中的最长总预约时间,因为可以不选择第n个预约)。
那么,最长总预约时间是多少呢?一定是选中第n-1或者选中第n个预约的最长总预约时间。(无论如何选择预约,要求最长,肯定会选择最后两个中的一个预约,因为预约时长不可能为负)
转移方程和初始值
cost(n)代表第n个预约的时长。
n=0;f(n)=0
n=1;f(n)=cost[1]
n=2;f(n)=max(cost[1],cost[2])
n=3;f(n)=max(cost[1]+cost[3],cost[2]);
n>3;f(n)=max(f(n-3),f(n-2))+cost[n];
返回结果
ret=max(f(n-1),f(n))
class Solution { public int massage(int[] nums) { if(nums==null || nums.length==0){ return 0; } if(nums.length==1){ return nums[0]; } if(nums.length==2){ return Math.max(nums[0],nums[1]); } if(nums.length==3){ return Math.max(nums[0]+nums[2],nums[1]); } int a=nums[0]; int b=nums[1]; int c=nums[0]+nums[2]; int d=c; for(int i=3;i<nums.length;i++){ c=d; d=Math.max(a,b)+nums[i]; a=b; b=c; } return Math.max(c,d); } }
详细请看:
相关推荐
行平面腔自再现模Fox-Li数值迭代解法及MATLAB实现
导数压轴题-----题型解法归纳无答案.doc
c++ 2120-双指针解法
1-LAB环境与解法 HCIE-RS3.0-LAB1拓扑预配 HCIE-RS3.0-LAB2拓扑预配 LAB1--有验证.pdf LAB2--有验证.pdf LAB1版本.pdf LAB1纯需求.pdf LAB2版本.pdf LAB2纯需求版.pdf LAB拓扑.pdf 2-TS-TAC环境与解法 HCIE-TAC环境 ...
FOX-LI数值迭代解法是一种用于求解激光谐振腔内光场分布的有效方法。它基于菲涅耳衍射理论,通过数值迭代的方式逐步逼近腔内光场的真实分布。这种方法特别适用于处理非稳腔的情况,因为非稳腔内的光线路径复杂多变,...
数值方法的基本思想是将原问题离散化为一系列的代数方程组,进而求得近似解。 ### 三、具体数值解法介绍 #### 1. Euler方法 - **基本原理**:Euler方法是最简单的数值解法之一。它基于Taylor级数展开的思想,即用...
2、HCIE LAB拓扑及解法,按照解法敲熟练两个月内去考稳定一次过人 拓扑包含 LAB optionC1 及 C2, 及 TS排错拓扑 及 TAC诊断拓扑。 包含完整拓扑+解法题库,拓扑下载里面的ENSP软件可以直接打开敲版本。 HCIE-RS3.0-...
数值解法不仅可以帮助我们解决实际问题,而且还能提供对问题更深入的理解。 #### 三、实验内容概述 实验4主要包括以下几个方面: 1. **常用数值算法**:本节介绍了两种最常用的数值算法——欧拉方法和龙格-库塔...
0952_极智开发_解读回归问题解法及示例代码
解法:汉诺塔问题的解法可以使用递归算法来实现。具体步骤如下: # 当只有一个圆盘时,直接将该圆盘从A柱移动到C柱即可。 # 当有n个圆盘时,将前n-1个圆盘从A柱移动到B柱,再将第n个圆盘从A柱移动到C柱,最后将前n...
这是一个NP完全问题,意味着没有已知的多项式时间算法可以解决所有规模的实例,因此,寻找有效解法成为研究的重点。 动态规划是解决TSP问题的一种常见方法,它通过构建一个二维数组来存储子问题的解,并利用这些子...
0-1背包问题的多种解法,包括暴力求解、动态规划求解、回溯法、贪心法求解求解、模拟退火算法,C++源代码,有详细的注释
通过理解和掌握游戏的解法,我们可以提高自己的问题解决能力,并将其应用到更广泛的领域,如编程、算法设计甚至是日常生活中遇到的决策问题。同时,游戏的扩展也为我们提供了无尽的探索空间,激发我们不断学习和创新...
平行平面腔自再现膜的Fox-Li数值迭代解法的matlab代码,没有额外调用函数,全部在一个m文件运算,迭代次数可调,最后输出最后一次迭代的波模图形和所有迭代的叠加图形,也可以微调代码改变输出
在MATLAB环境中实现这一解法,首先需要明确迭代解法的过程,包括初始化光场分布,然后根据惠更斯-菲涅尔原理和菲涅尔-基尔霍夫衍射积分计算每次渡越后的场分布。这涉及到对光线在镜面间的反射和衍射进行数值模拟。...
方程组的解法是数学中的基本概念,对于软件开发者来说,这不仅仅是理论知识,也是实际编程中解决问题的工具。这篇资料主要讨论的是如何解二元一次方程组,这是软件开发中涉及算法和数据结构时的基础。 首先,让我们...
0-1背包问题 一种解法
为了解决这一问题,研究者引入了分数阶的概念,提出了时空分数阶Black-Scholes模型。 分数阶微积分是传统微积分的一个扩展,其中导数和积分可以取非整数值。在金融中,分数阶Black-Scholes模型通过引入分数阶导数来...
MATLAB-微分方程问题的解法精品MATLAB-微分方程问题的解法精品
通过两个示例题的深入探讨和变化,学生的思维能力得到培养,他们不仅能解一个问题,还能掌握解决同类问题的方法。虽然表面上课程内容可能看起来不多,但实际上对学生思考和解决问题的能力锻炼是全面且深入的。