数据结构与算法:动态规划

本文探讨了动态规划在解决决策过程最优化问题中的应用,包括如何选择使用递推、贪心、搜索还是动态规划。文章通过Fib数列的例子介绍了动态规划的概念,并展示了如何使用动态规划解决任务安排问题,特别是找到数组中不相邻元素的最大和问题。
摘要由CSDN通过智能技术生成

动态规划

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。

递推、贪心、搜索和动态规划该如何选择???

一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!

  • 每个阶段只有一个状态---->递推;
  • 每个阶段的最优状态都是由上一个阶段的最优状态得到的---->贪心;
  • 每个阶段的最优状态是由之前所有阶段的状态的组合得到的---->搜索;
  • 每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的---->动态规划。

动态规划之Fib数列

有个小孩上楼梯,共有N阶楼梯,小孩一次可以上1阶,2阶。走到N阶楼梯,一共有多少种走法?

DP之自顶向下分析方式:
爬到第N阶楼梯,一共只有2种情况(全划分,加法原理),从第N-1阶爬1阶到第N阶;从第N-2阶爬2阶到第N阶;
故:way(N)=way(N-1)+way(N-2)
在这里插入图片描述

任务安排问题

在这里插入图片描述

代码实现

数组arr存储的是每个任务的收益;

arr = [0, 5, 1, 8, 4, 6, 3, 2, 4]
#数组prev存储的是指定任务之前可以执行的任务
prev = [0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值