题目:
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。
在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。(取中间,放两边)
给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。
预约序列 nums= {1,5,6,9,19}
比对 1+6+19 和 5+9 的最大值
//初始化记录总时长分钟数
int[] dp = new int[nums.length];
//预约1,2号,固定数值
dp[0] = nums[0];
dp[1] = Math.max(nums[0] , nums[1]);
//大于2个预约,取中间,放两边
dp[i] = Math.max(dp[i-1] , nums[i]+dp[i-2]);
解答:
@Test
public void test4() {
//初始化预约数
int[] nums = { 1,5,6,9,19 };
//初始化记录总时长分钟数
int[] dp = new int[nums.length];
//预约1,2号,固定数值
dp[0] = nums[0];
dp[1] = Math.max(nums[0] , nums[1]);
//大于2个预约,取中间,放两边
for(int i=2;i<nums.length;i++){
dp[i] = Math.max(dp[i-1] , nums[i]+dp[i-2]);
}
System.out.println("max min"+dp[dp.length-1]);
}