您的位置:首页 > 汽车 > 新车 > 免费课程网站有哪些_品牌策划公司价格_厦门排名推广_百度手机极速版

免费课程网站有哪些_品牌策划公司价格_厦门排名推广_百度手机极速版

2025/2/7 16:19:16 来源:https://blog.csdn.net/2301_76197086/article/details/142762976  浏览:    关键词:免费课程网站有哪些_品牌策划公司价格_厦门排名推广_百度手机极速版
免费课程网站有哪些_品牌策划公司价格_厦门排名推广_百度手机极速版

动态规划解题步骤:

1.确定状态表示:dp[i]是什么

2.确定状态转移方程:dp[i]等于什么

3.初始化:确保状态转移方程不越界

4.确定填表顺序:根据状态转移方程即可确定填表顺序

5.确定返回值

题目链接:面试题 17.16. 按摩师 - 力扣(LeetCode)

题解1(斐波那契数列模型):

1.状态表示: dp[i]表示接受nums[i]预约的最优预约

2.状态转移方程:dp[i]=nums[i]+max(dp[i-2],dp[i-3])  由于接受了nums[i]的预约,所以只能接受nums[i-2]或者nums[i-3]的预约

3.初始化:dp[0]=nums[0]、dp[1]=nums[1]、dp[2]=nums[0]+nums[2]

4.填表顺序:一维数组,从左向右填写

5.返回值:max(dp[n-1],dp[n-2])  最优预约只能是接受最后一天或者倒数第二天预约

class Solution {
public:int massage(vector<int>& nums) {size_t n=nums.size();//处理边界条件if(n==0)return 0;if(n==1)return nums[0];if(n==2)return max(nums[0],nums[1]);if(n==3)return max(nums[0]+nums[2],nums[1]);//dp[i]表示最后一个预约是nums[i]的最优预约//创建dp表vector<int> dp(n);//初始化dp[0]=nums[0];dp[1]=nums[1];dp[2]=nums[0]+nums[2];//填表for(int i=3;i<n;++i){dp[i]=nums[i]+max(dp[i-2],dp[i-3]);}//返回值return max(dp[n-1],dp[n-2]);}
};

题解2(简单多状态dp问题):

1.状态表示:有两个dp表,分别为f[i]和g[i],分别表示接受nums[i]预约和不接受nums[i]预约的最优预约

2.状态转移方程:f[i]=nums[i]+g[i-1]   g[i]=max(f[i-1],g[i-1])  接受nums[i]的预约,最佳预约就是再加上不接受前一个预约的最佳预约;不接受nums[i]的预约,最佳预约就是取接受或者不接受前一个预约的最大值

3.初始化:f[0]=nums[0]   g[0]=0

4.填表顺序:一维数组,从左向右填写

5.返回值:max(f[n-1],g[n-1])

class Solution {
public:int massage(vector<int>& nums) {size_t n=nums.size();//处理边界条件if(n==0)return 0;//创建dp表vector<int> f(n);auto g=f;//初始化f[0]=nums[0];g[0]=0;//填表for(int i=1;i<n;++i){f[i]=nums[i]+g[i-1];g[i]=max(f[i-1],g[i-1]);}return max(f[n-1],g[n-1]);}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com