蓝桥杯——每日一练 省赛 Python保姆级讲解

简介: 蓝桥杯——每日一练 省赛 Python保姆级讲解

1.问题描述


小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层,但是这项能力无法连续使用。已知向上1高度消耗的时间为1,跳跃不消耗时间。由于事态紧急,小D想知道他最少需要多少时间到达顶层。


输入格式:


第一行包含一个整数n,代表楼的高度。


接下来n行每行一个整数ai,代表i层的楼层高度(ai <= 100)。


输出格式:


输出1行,包含一个整数,表示所需的最短时间。


2.题目分析


这道题很像Leedcode里面的一道经典例题青蛙跳台阶 只不过这道题里有两种状态 跳和爬


按照动态规划的一般思路:1定义数组含义 2找到递推关系 3赋予初值


3.算法设计


先看,到达第i层(如果i很大很大,这么说是为了防止特殊情况),那么到第i层有2种做法:


跳和爬。问题要求我们求最短时间,那我们不妨就设一个关于最短时间的数组,容易想到,因为最短时间不仅涉及到楼层数,还涉及到到达第i层的做法,我们不妨设一个二维数组dp[i][j]表示到达第i层的最小费用。那么现在讨论 做法和j的关系:到达第i层楼,我们实际上有三种做法 :1>>从i-1层爬上去 ,2>>从i-1层跳上去, 3>>从i-2层跳上去  


因而我们应该这样定义:


""dp[i][0]代表爬到第i层 花费时间


dp[i][1]代表到跳第i层 花费时间 从i-1上来

dp[i][2]代表到跳第i层 花费时间 从i-2上来""


定义完数组含义,下面就是要寻找递推关系:


考虑dp[i][0],根据其含义,我们可知,dp[i][0]=a[i]+min(dp[i-1][0],dp[i-1][1],dp[i-1][2])


具体来说,就是既然已知是爬到i层,而到i层有三种做法:从i-1爬上来,从i-1跳上来,从i-2跳上来。因而取这三种做法的最小值 可达到目的


考虑dp[i][1],根据其含义,我们可知,dp[i][1]=dp[i-1][0]


具体来说,就是既然已知是从i-1层跳到第i层,且题意说明不可连续跳,那么在从i-1层出发,只能是爬到i层,因而费用等于爬到i-1层的费用


同理可得 dp[i][2]=dp[i-2][0]


定义好数组并找到了递推关系,现在只需要赋予初值:由递归关系下标可知,i>=2,那么我们对dp[0],dp[1],进行赋值。dp[0]=[0,0,0],dp[1]=[a[1],0,0]


(这里读者模拟一下dp[2]的形成过程就可知晓)


4.代码实现


n=int(input())
a=[]
for i in range(n):
    a.append(int(input()))
a.insert(0,0)
dp=[[0,0,0] for i in range(n+1)]
dp[1]=[a[1],0,0]
for i in range(2,n+1):
    for j in range(3):
        if j==0:
            dp[i][0]=a[i]+min(dp[i-1][0],dp[i-1][1],dp[i-1][2])
        elif j==1:
            dp[i][1]=dp[i-1][0]
        else:
            dp[i][2]=dp[i-2][0]
print(min(dp[n]))


看完如果有收获~麻烦点个三连可以吗!!


后续有任何不懂的都可以来私信我~


我是小郑 正在备战蓝桥杯 奔赴热爱 奔赴山海!


目录
相关文章
|
3月前
|
数据安全/隐私保护 Python
Python以及基础语法保姆级教程(超详细)-3
Python以及基础语法保姆级教程(超详细)
|
3月前
|
存储 Python 容器
Python以及基础语法保姆级教程(超详细)-2
Python以及基础语法保姆级教程(超详细)
|
4月前
|
IDE 开发工具 iOS开发
最好用的Python IDE,pycharm保姆级安装教程
本文向非IT行业的新手介绍了如何安装Python IDE PyCharm。首先,从[PyCharm官网](https://www.jetbrains.com/PyCharm/download/)下载适用于Windows(本文重点)或macOS的相应版本,推荐选择免费的社区版。在Windows安装过程中,选择自定义安装目录(避免C盘),并勾选必要的配置选项,如更新路径、添加到PATH、创建文件关联等。安装完成后,可选择稍后重启。Mac用户需将.dmg安装包中的图标拖至Applications。最后,启动PyCharm并根据提示设置初始界面和基本选项。
188 1
|
3月前
|
机器学习/深度学习 Linux 开发者
Python以及基础语法保姆级教程(超详细)-1
Python以及基础语法保姆级教程(超详细)
|
3月前
|
机器人 API 开发者
Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
|
3月前
|
程序员 API 计算机视觉
技术经验解读:【python自动化】02.pywin32库自动操作键鼠(保姆级代码注释)
技术经验解读:【python自动化】02.pywin32库自动操作键鼠(保姆级代码注释)
81 0
|
4月前
|
Linux C语言 iOS开发
Python初学者在不同系统上安装Python的保姆级指引_altinstall 安装路径
Python初学者在不同系统上安装Python的保姆级指引_altinstall 安装路径
|
4月前
|
缓存 运维 Linux
保姆级python项目离线部署服务器教程只需这一篇就够了(建议收藏)
这篇文章提供了详尽的Python项目在离线Linux(CentOS)服务器上的部署教程。作者首先介绍了环境背景,强调了无网络环境和使用有网络的CentOS虚拟机准备安装包的重要性。教程分为两部分:外网环境搭建和内网离线安装。在外网环境中,包括下载Python 3.9.0安装包、传输至服务器、安装依赖包,并使用pip3下载项目所需依赖。内网安装则涉及依赖包的复制和Python环境的同样步骤。最后,作者分享了运行项目的命令,并总结了离线安装的整个流程,提醒读者注意可能出现的问题。
保姆级python项目离线部署服务器教程只需这一篇就够了(建议收藏)
|
3月前
|
供应链 数据可视化 搜索推荐
【python plotly库介绍】从视觉到洞见:桑基图在业务分析中的应用【保姆级教程过于详细珍藏版】
【python plotly库介绍】从视觉到洞见:桑基图在业务分析中的应用【保姆级教程过于详细珍藏版】
|
4月前
|
Linux Python Windows
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
285 2