zoukankan      html  css  js  c++  java
  • 【dp】Leetcode面试题 17.16. 按摩师

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

    在这里插入图片描述
    暴力法:对于每个预约都有可选和可不选的两种情况

    记忆型递归:暴力法的问题在于有很多重复的子问题,可以使用记忆型递归的方式大大提高效率

    动态规划:
    dp数组的含义:dp[x]代表在[0......x]范围内能取到的最长预约时间

    class Solution {
    
        public int massage(int[] nums) {
            int n = nums.length;
            if (n == 0) return 0;
            if (n == 1) return nums[0];
            int[] dp = new int[n];//dp[x]代表 考虑选择[0 .... x ]范围里的预约 的最大总预约时间
            dp[0] = nums[0];
            dp[1] = Math.max(nums[0], nums[1]);
            for (int i = 2; i < n; i++) {
             //遍历迄今为止的最大值,两种情况取较大:
                //1:预约本次,则上一次不预约(dp[i-2] + nums[i])
                //2:本次不预约,则值为预约到上一次的最大值
                dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
            }
            return dp[n - 1];
        }
    
    
        public static void main(String[] args) {
            System.out.println(new Solution().massage(new int[]{1, 3, 5, 6, 2, 5}));
        }
    }
    

    这一题和leetcode 打家劫舍一摸一样的

  • 相关阅读:
    UOJ388 [UNR #3] 配对树
    洛谷P6151 [集训队作业2019] 青春猪头少年不会梦到兔女郎学姐
    CF908H New Year and Boolean Bridges
    CF704C Black Widow
    CF1338
    CF1361
    CF1110H Modest Substrings
    CF1322
    CF1182F Maximum Sine
    Elastic Stack(ELK)
  • 原文地址:https://www.cnblogs.com/HoweZhan/p/12560689.html
Copyright © 2011-2022 走看看