写了一个多小时思路,最后准备提交了,系统给我卡了一下,啥也没保存,心态炸了,贴个ac代码吧,烦死了
import math
# 最短路径 = min(最短路径, 另一条最短路径 + 边长度)
dp = [float('inf')] * 2022 # 因为求最短路径,所以把dp值全设为最大
dp[1] = 0 # 1到1的最短路径为0
def func(x, y):
return (x * y)//math.gcd(x, y) # 最小公倍数 = 他们的乘积/他们的最大公约数
for i in range(1, 2022):
for j in range(i + 1,i + 22):
if j > 2021:
break
dp[j] = min(dp[j], dp[i] + func(i, j))
print(dp[2021])