蓝桥杯 真题演练(二) python 动态DP 最小公倍数

s = time % 60 # 总时间除余60得到的就是秒数

print(“%02d:%02d:%02d” % (h,m,s)) # 题目要求不足两位数要补0,那么就能使用这种格式表示

路径

=================================================================

在这里插入图片描述

💦💦这是一道填空题,但可以把它当做一道大题来做。题目的意思简单理解为 每个节点的距离是他们的最小公倍数,而节点与节点之间的编号之差不能大于21,最后求的是节点1到节点2021的最短距离。

💦💦 这里就涉及到了一个知识点——最小公倍数,为求最小公倍数,有个公式是 最小公倍数 = 两数乘积 / 最大公约数。而最大公约数可以使用辗转相除法求解。

💦💦 接着我们应该怎么做呢?这题可以用动态DP打表的方式得出答案。如果不清楚DP数组的朋友可以点击这里。提到DP我也说一下,最近几年蓝桥杯试题的难度增长趋势是非常明显的,因此动态DP应该是要成为我们的必备技能。(❗️❗️所以我强烈建议不了解DP数组的朋友把DP学会❗️❗️)

💦💦 如果你已经知道了如何使用动态规划的DP数组,那么这道题就变得容易起来,每个中间节点(假设是i)无非就两个动作:找到通往 i 节点的最近节点确定 i 节点与下一节点的距离。

在这里插入图片描述

说完了中间部分的节点,现在就来说一下两边的节点,因为节点1是所有数的约数,那么它可以直接得出 2~22 的距离了,就是节点值本身。而最后一个数2021,它的动作就是判断在它的连接范围内哪个距离最短,哪个短就选哪个。

💦💦 我们先看一下二维DP的思路

试题D:路径 答案:10266837

最小公倍数LCM(least common multiple)的辗转相除法。

def lcm(a,b):

if a > b:

a,b = b,a

mul = a * b

不断用大的数除以小的数取余数部分直到最后能够整除为止。

while a > 0:

a,b = b % a, a

return mul// b

target = 2021

dp= [[float(“inf”)] * (target+1) for i in range(target+1)] # 创建列表的两种写法

初始化状态

for i in range(1,23): # 1能到的最远距离是22,因为22-1不大于21,所以这里右区间是23

dp[1][i] = i # 1 与 n 的最小公倍数必定是 n

for i in range(2,target+1): # 填表

从第i个数开始只填绝对值小于21的部分

for j in range(i,i+22):

当超出目标值2021时终止循环

if j > target:

break

当j等于i时,寻找上一个距离i最近的节点,第一个动作

if j == i:

寻找前面21范围以内的数,找出上一节点到i节点的最短路径

for k in range(1,22):

if i - k > 0:

取二者最小值

dp[i][j] = min(dp[i][j],dp[i-k][j])

else:

break

第二个动作就是确定i的上一节点到i的下一节点的距离

else:

dp[i][i]表示上一个节点到节点i的最短距离,然后上一节点又表示上上节点到该节点的距离,然后上上…

其实就是节点1到节点i的距离

lcm(i,j)表示i到下一节点的距离

dp[i][j]表示节点1到节点j的路径

dp[i][j] = lcm(i,j) + dp[i][i]

最后打印结果

print(dp[target][target])

💦💦对于二维DP而言,有些地方是可以优化的,可以一气呵成,将两个动作合并成一个动作,转换成一维DP。下面我们看一下代码实现。

试题D:路径 答案:10266837

文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值