动态规划解题流程

一、认识动态规划

在这里插入图片描述

二、动态规划的题目类型

1. 求最大最小值

①从左上角走到右下角路径的组大数字和
②最长上升子序列长度

最常见的题目类型

2. 计数

①有多少种方式走到右下角
②有多少种方法选出k个数使得和是sum

3. 求存在性

①取石子游戏,先手是否必胜
②能不能选出k个数使得和是sum

三、求最大最小值(Coin Change)

有三种硬币,分别面值为2元、5元和7元,每种硬币足够多
买一本书需要27元
如何用最少的硬币组合正好付清,不需要找钱

1. 确定状态

1)最后一步

①假设序列a1 a2 … ak是最优解
②则a1 a2 … ak-1是拼出27-ak的最优解

可以用反证法证明,若②不成立,则①也不成立

2)子问题

所以现在我们只需要求27-ak的最优解
相当于缩小了问题规模

在这里插入图片描述

2. 状态转移方程

在这里插入图片描述

3. 初始条件和边界情况

在这里插入图片描述

4. 计算顺序

根据状态转移方程决定计算顺序

在这里插入图片描述

四、计数(Unique Paths)

在这里插入图片描述

1. 确定状态

1)最后一步

在这里插入图片描述

2)子问题

在这里插入图片描述

2. 状态转移方程

在这里插入图片描述

3. 初始条件和边界状态

在这里插入图片描述

4. 计算顺序

五、求存在性(Jump Game)

在这里插入图片描述

1. 确定状态

1)最后一步

在这里插入图片描述

2)子问题

在这里插入图片描述

2.状态转移方程

在这里插入图片描述

3. 初始条件和边界情况

在这里插入图片描述

4. 计算顺序

六、总结动态规划适用情况

①最优化原理:假设问题的最优解所包括的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
②无后效性:即某阶段状态一旦确定。就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响曾经的状态。仅仅与当前状态有关;
③有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到(该性质并非动态规划适用的必要条件,可是假设没有这条性质。动态规划算法同其它算法相比就不具备优势)。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一道多道程序设计环境下的作业调度问题,需要根据每个作业对CPU和输入/输出设备的使用顺序和时间,计算出它们的完成时间,从而确定它们的完成顺序。 我们可以按照以下步骤来解决这道题目: 1. 画出每个作业的执行流程图,以便更好地理解它们的执行顺序和时间。 2. 根据流程图,计算出每个作业的完成时间。 3. 比较每个作业的完成时间,确定它们的完成顺序。 具体来说,对于这道题目,我们可以按照以下步骤来解决: 1. 画出每个作业的执行流程图: ``` Job1: I2(30ms) -> CPU(10ms) -> I1(30ms) -> CPU(10ms) -> I2(20ms) Job2: I1(20ms) -> CPU(20ms) -> I2(40ms) Job3: CPU(30ms) -> I1(20ms) -> CPU(10ms) -> I1(10ms) ``` 在流程图中,我们按照作业执行的顺序,标明了每个作业使用CPU和输入/输出设备的时间,以及它们之间的顺序关系。 2. 计算出每个作业的完成时间: 根据流程图,我们可以得到每个作业的完成时间: ``` Job1: 100ms Job2: 80ms Job3: 70ms ``` 我们可以按照以下步骤来计算每个作业的完成时间: - 对于Job1,它的完成时间是在第一次使用I2设备的时间加上使用I2设备的时间、使用CPU的时间、使用I1设备的时间、使用CPU的时间和第二次使用I2设备的时间,即30ms + 30ms + 10ms + 30ms + 10ms + 20ms = 100ms。 - 对于Job2,它的完成时间是在第一次使用I1设备的时间加上使用I1设备的时间、使用CPU的时间和使用I2设备的时间,即20ms + 20ms + 40ms = 80ms。 - 对于Job3,它的完成时间是在使用CPU的时间加上使用I1设备的时间、使用CPU的时间和使用I1设备的时间,即30ms + 20ms + 10ms + 10ms = 70ms。 3. 确定作业的完成顺序: 根据每个作业的完成时间,我们可以确定它们的完成顺序: - Job3的完成时间最早,所以它是第一个完成的。 - Job2的完成时间稍晚于Job3,所以它是第二个完成的。 - Job1的完成时间最晚,所以它是最后一个完成的。 因此,作业的完成顺序为:Job3 -> Job2 -> Job1。 综上所述,我们就完成了这道多道程序设计环境下的作业调度问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值