天天看點

按摩師

一個有名的按摩師會收到源源不斷的預約請求,每個預約都可以選擇接或不接。在每次預約服務之間要有休息時間,

是以她不能接受相鄰的預約。給定一個預約請求序列,替按摩師找到最優的預約集合(總預約時間最長),傳回總的分鐘數。

示例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。      
package com.gong;

/**
 * dp[]數組記錄nums[]數組前i項按要求組合最大值
 * */
public class JiSi {
    public static int massage(int[] nums){
        if(nums==null)
        {
            return 0;
        }
        if(nums.length==0){
            return 0;
        }
        if(nums.length==1){
            return nums[0];
        }
        int[] dp=new int[nums.length];
        dp[0]=nums[0];
        dp[1]=nums[1];
        for(int i=2;i<nums.length;i++){
            dp[i]=Math.max(dp[i-2]+nums[i],dp[i-1]);
        }
        for(int j=0;j<dp.length;j++)
        {
            System.out.print(dp[j]+"  ");
        }
        return dp[nums.length-1];
    }

    public static void main(String[] args) {
        int[] muns={1,6,9,4,5,6,9,3,9};
        int result=0;
        result=massage(muns);
        System.out.println();
        System.out.println("result="+result);
    }
}