publicclassSolution{publicintmassage(int[] nums){int len = nums.length;if(len ==0){return0;}if(len ==1){return nums[0];}// dp[i][0]:区间 [0, i] 里接受预约请求,并且下标为 i 的这一天不接受预约的最大时长// dp[i][1]:区间 [0, i] 里接受预约请求,并且下标为 i 的这一天接受预约的最大时长int[][] dp =newint[len][2];
dp[0][0]=0;
dp[0][1]= nums[0];for(int i =1; i < len; i++){//第i个不预约的结果下 分为第i-1个不预约和第i-1个预约的两种情况
dp[i][0]= Math.max(dp[i -1][0], dp[i -1][1]);//第i个预约上了,第i-1个只能预约不上
dp[i][1]= dp[i -1][0]+ nums[i];}return Math.max(dp[len -1][0], dp[len -1][1]);}}
一维变量
int dp[]=newint[len];
dp[0]=nums[0];
dp[1]=Math.max(nums[0],nums[1]);for(int i =2; i < len; i++){
dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i]);//最后一个预约不预约取决于前一个有没有预约//i-1预约 i不可以预约 i-2预约 i可以预约}return dp[len-1];
第一种基本解法public class Solution { public int massage(int[] nums) { int len = nums.length; if (len == 0) { return 0; } if (len == 1) { return nums[0]; } // dp[i][0]:区间 [0, i] 里接受预约.