动态规划问题<递归问题>1

时间:2020-03-24
本文章向大家介绍动态规划问题<递归问题>1,主要包括动态规划问题<递归问题>1使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

leetcode 每日一题日常打卡 面试题 17.16 按摩师问题 首先是问题描述: 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。 思考:由于是个新手,刚接触这道题想了十几分钟完全没有任何思路,通过查资料得知这种求最优解的问题一般都是通过动态规划求解。 但是我突然想到应该也可以用递归求解!通过创建一个循环,从数组第0个元素开始遍历,因为这个问题是不能取临近的值,因此,下面通过手写讲诉:

class Solution {
public:
    int massage(vector<int>& nums) {
        vector<int> a;    //创建一个存放每次遍历出结果的数组
        int i = 0;
        vector<int >::iterator it  = nums.begin();
       if(1 == nums.size())    //如果该数组只有一个元素,那么直接返回它就行
        {
            return nums.front();
        }
        if(2 == nums.size())   //如果有两个元素,那么直接比较大小,返回大的即可,这也是递归的结束条件
        {
            return nums.front()>nums.back()?nums.front():nums.back();
        }
        if(nums.size()>2)
        {
            while(i<nums.size())
            {
                vector<int > c = nums;
                if(i+2>nums.size())
                {
                    break;
                }
                //ans[i] = nums[i]+massage((nums+i+2),numsSize-i-2);
                c.erase(c.begin(),c.begin()+i+2);
                int val = nums.at(i)+massage(c);   //通过递归方式得出每一次的值
                a.push_back(val);
                i++;
            }
            sort(a.begin(),a.end());    //排序从小到大
            return a.back();
        }
        return 0;
    }
};

原文地址:https://www.cnblogs.com/-mySmellerArea/p/12559092.html