📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜 🏅🏅🏅CSDN Python领域优质创作者,大二在读,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++) 💕
入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈 🌟🌟🌟✨✨✨
前言:
【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡
@TOC
真题描述
题目描述
输出描述 输出一个整数,表示得到目标种子的最短杂交时间。
输入输出样例 示例 输入
6 2 4 6 5 3 4 6 4 9 1 2 1 2 3 1 3 4 2 3 5 4 5 6
# 输出 16
样例说明
第 1 天至第 5 天,将编号 1 与编号 2 的作物杂交,得到编号 3 的作物种子。
第 6 天至第 10 天,将编号 1 与编号 3 的作物杂交,得到编号 4 的作物种子。
第 6 天至第 9 天,将编号 2 与编号 3 的作物杂交,得到编号 5 的作物种子。
第 11 天至第 16 天,将编号 4 与编号 5 的作物杂交,得到编号 6 的作物种子。
总共花费 16 天。
运行限制 最大运行时间:2s 最大运行内存: 256M
解题思路
- 挨着来说,首先注意输入要求,第一行要包括四个数据,我们可以用
map()
函数来实现input()
批量输入 - 然后第二行,第三行的输入要为以后找最短天数提供数据,我们将其用列表的方式存储,便于后续使用
- 然后定义搜索函数dfs(),其中的
参数T便是我们要求的目标作物
,当目标作物在已知的have中时,此时需要的时间就是0; - 当其不在其中时,我们就在
杂交方式ways
中找到目标作物T,此时的ways中的元素中的小列表中的第三个元素便是我们的T
,顺势我们将此小列表中得到T的那两个元素也在times中找到,看看他们所需要的时间,取他们其中的最大值tmp = max(times[i[0]-1], times[i[1]]-1)
- 紧接着采用递归的方式看看其余的这两个元素是否在已知的have中存在,若存在则时间是0,不存在则时间采用同种方式继续求得,此时的time便为
min_t =max(dfs(i[0]), dfs(i[1])) + tmp
- 如果在
have或者ways中
没有我们所要的目标元素,那需要的时间就还是无限的,因此在开始时我们要把时间time定义为无限大
,当只有在have或者ways中找到我们要得到的元素时,我们在能进一步得到一个具体的时间min_t
,此时让time = min_t
,最后函数结束return 我们的time
。
源码分享
import math N, M, K, T = map(int, input().split()) times = list(map(int, input().split())) have = list(map(int, input().split())) ways = [] for i in range(K): ways.append(list(map(int, input().split()))) # 定义dfs函数搜索情况,参数T是目标种子 def dfs(T): # 出口 if T in have: return 0 # 寻找目标种子 time = math.inf for i in ways: if i[2] == T: tmp = max(times[i[0]-1], times[i[1]]-1) min_t = max(dfs(i[0]), dfs(i[1])) + tmp time = min_t return time print(dfs(T))
学习总结
1.input() 接收多个用户输入需要与split()结合使用
host, port, username, passwd, dbname = input("请输入服务器地址,端口号,用户名,密码及数据库名,空格隔开:").split() # 注意input()的返回类型是str print(host,port,username,passwd,dbname) # 请输入服务器地址,端口号,用户名,密码及数据库名,空格隔开:10.1.1.71 22 root 123456 db_name # 10.1.1.71 22 root 123456 db_name
注意返回的数据类型是str,如果是整数需要转化为int才可正常使用 map()用法
map(function, iterable, …) function – 函数 iterable – 一个或多个序列
返回值: Python 2.x 返回列表。 Python 3.x 返回迭代器。 所以Python 3.x要加list()函数将迭代器转化为列表
N, M, K, T = map(int, input().split()) times = list(map(int, input().split()))
2.math.inf
表示正无穷大,负无穷大为-math.inf
- math.pi 圆周率pi
- math.e 自然常数e
- math.factorial(x) 返回x的阶乘如果x是小数或复数,返回ValueError
- math.fabs(x) 返回x的绝对值
- math.ceil(x) 向上取整,返回不小于x的最小整数
>>> ceil(4.2) 5
- math.floor(x) 向下取整,返回不大于x的最大整数
>>> floor(4.2) 4
🏅今天是我在Python训练营的第 3 天,希望每天都能见到最棒的你🏅
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了 ❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~