动态规划-面试题 17.16:

 

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

 


public static int rec_opt(int []arr,int i){
    //递归终止的条件,意味着如果只能选第一个,那么最好的方法就是arr[0]
    if(i==0)
        return arr[0];
    //处理特殊情况,因为题目要求间隔选择
    else if(i==1)
        return Math.max(arr[0],arr[1]);
    else{
        int a = rec_opt(arr,i-2) + arr[i];  //对于每一个顾客无非两种情况,选或者不选,如果选的话,就是,i-2个的最优解加上当前的value
        int b = rec_opt(arr,i-1);           //如果不选,那么就只能使用上一个的最优解
        return Math.max(a,b);                 //最后比较两种情况,得出当前情况的最优解
    }
}

 

posted @ 2021-05-23 15:16  康世行  阅读(12)  评论(0编辑  收藏  举报