动态规划-简单多状态dp问题——面试题17.16.按摩师

server/2024/10/18 2:11:07/

多状态问题的核心就是每个位置不止有一个状态,因此需要多个dp表表示不同状态对应位置的值,然后根据题目考虑特定情况写出状态转移方程即可 

1.题目解析

题目来源:面试题17.16.按摩师——力扣 

测试用例 

2.算法原理

1.状态表示

这里与路径问题不同的是每个位置都不止一个状态,因此开辟两个dp表,两个dp表中的dp[i]都表示在第i个位置的最大预约数,其中第i个位置可以被预约也可以不被预约 

2.状态转移方程

当第i个位置被预约:这就意味着第i-1个位置一定不会被预约,此时只需要求出第i-1个位置不被预约时的最大分钟数加上nums[i]就得出第i个位置的最大分钟数

当第i个位置不被预约:这代表第i-1个位置可以被预约也可以不被预约,因此需要计算出前一个位置的两种情况后去较大值即可

3.初始化

创建了两个dp表,一个代表指定位置被预约:f,一个代表指定位置不被预约:g,并且状态转移方程中需要用到i-1个位置,因此需要初始化两个dp表的第一个位置

f[0]:第一个位置被预约,直接就是nums[0]

g[0]:第一个位置不被预约,则直接为0

4.填表顺序

由于每个位置都需要前一个位置来计算,因此是从左到右填表的顺序

5.返回值

在走到两个dp表的末尾,由于不确定最后一个位置是否被预约,因此需要去f[n-1]与g[n-1]的较大值,并且注意考虑空表的情况,原来的表为空就返回0即可

3.实战代码

class Solution {
public:int massage(vector<int>& nums) {int n = nums.size();vector<int> f(n);vector<int> g(n);if(n == 0){return 0;}f[0] = nums[0];for(int i = 1;i < n;i++){f[i] = g[i-1] + nums[i];g[i] = max(f[i-1],g[i-1]);}int Max = max(f[n-1],g[n-1]);return Max;}
};

 


http://www.ppmy.cn/server/132649.html

相关文章

Java 类和对象详解(上 )

个人主页&#xff1a; 鲤鱼王打挺-CSDN博客 Java专栏&#xff1a;https://blog.csdn.net/2401_83779763/category_12801101.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12801101&sharereferPC&sharesource2401_83779763&sharefromfrom_link &…

第十届MathorCup高校数学建模挑战赛-A题:基于 logistic 回归和 DEA 模型对无车承运平台线路定价问题的优化和评价

目录 摘 要 一、问题重述 1.1 问题背景 1.2 目标任务 二、问题分析 三、模型假设 四、符号说明 五、模型建立和求解 5.1 问题一的分析和建模 5.1.1 成分初步筛选 5.1.2 缺失值处理 5.1.3 相关性分析 5.1.4 主成分分析 5.2 问题二的分析和建模 5.2.1 数据预处理 …

报错Automatic merge failed; fix conflicts and then commit the result.

git pull test2 main From https://github.com/xx/test2* branch main -> FETCH_HEAD Auto-merging README.md CONFLICT (add/add): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result. 报错原因&#xff…

Lumerical学习——优化和参数扫描(Optimization and parameter sweeps)

一、概要介绍 这部分介绍优化和参数扫描项目设定的方法。在有大量数据模拟计算过程中这个特性允许用户使处理方法自动地查找期望的参数值。 ① 创建一个参数扫描任务 ② 创建一个优化任务 ③ 创建一个良率分析任务 ⑤ 打开所选择项目的编辑窗口&#xff0c;编辑其属性…

LeetCode322:零钱兑换

题目链接&#xff1a;322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for(int i 0; i < coins.size(); i){fo…

Power BI:链接数据库与动态数据展示案例

一、案例背景 在数据驱动的时代&#xff0c;如何高效、直观地展示和分析数据成为了企业决策和个人洞察的关键。Power BI作为一款强大的商业智能工具&#xff0c;凭借其强大的数据连接能力、丰富的可视化选项以及交互性和动态性&#xff0c;成为了众多企业和个人的首选。本文将…

linux 配置ssh免密登录

一、 cd /root/.ssh/ #不存在就创建mkdir /root/.ssh ssh-keygen #连续按4个回车 ll二、将公钥发送到目标服务器下 #公钥上传到目标服务器 ssh-copy-id root192.168.31.142 #回车完也是要输入密码的 #测试一下免密登录&#xff1a; ssh root192.168.31.142 成功

fiber的原理

React Fiber 的主要原理包括动态优先级、可中断的工作、增量渲染和协作式多任务 React Fiber 是 React 16 引入的一种新的协调&#xff08;reconciliation&#xff09;引擎&#xff0c;它旨在提高 React 应用的性能和响应性。Fiber 的核心原理主要包括以下几个方面&#xff1a…