目录
1. 40分代码
2.高精度加法
3.全AC代码
4.惊掉下巴的解法
P2437 蜜蜂路线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
1. 40分代码
m, n = map(int,input().split())ans = 0 d = [1,2] flag = [0 for _ in range(n+1)] def fun(step):global ansif step == n:ans += 1returnfor i in d:di = step+iif 0<di<=n and flag[di] == 0:flag[di] = 1fun(di)flag[di] = 0fun(m) print(ans)
2.高精度加法
看网上的解法是有关高精度加法,那我们就先来学习一下什么是高精度加法。
蓝桥杯-Python-高精度加法 - 知乎 (zhihu.com)
A = list(input()) B = list(input()) l = abs(len(A)-len(B)) # 这里插0是因为可能下一位会有进位 for i in range(l):if len(A)>len(B):B.insert(0,0)else:A.insert(0,0) C = [] r = 0 for x,y in zip(A[::-1],B[::-1]):# 一位一位对应相加print(f'{x},{y}')ss = int(x)+int(y)+r# 进位if ss>=10:r = ss//10else:r = 0C.insert(0,str(ss%10)) C.insert(0,str(r)) print(int(''.join(C)))
知识点:
""" zip函数的使用 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。 """ # zip函数的返回值 l1 = [1, 2, 3] l2 = [4, 5, 6] l3 = [7, 8, 9, 10] zipped = zip(l1,l2) print(zipped) #返回的是一个对象——<zip object at 0x000002903F8A2040># zip的使用 print(list(zipped)) #[(1, 4), (2, 5), (3, 6)] print(list(zip(l1,l3))) #元素个数与较短的一致 [(1, 7), (2, 8), (3, 9)] # *zip解压为列表 ll1, ll2 = zip(*zip(l1,l2)) print(list(ll1)) #[1, 2, 3] print(list(ll2)) #[4, 5, 6]
3.全AC代码
n, m = map(int,input().split())dp = ['0' for _ in range(m+10)] dp[n] = '1' dp[n+1] = '1'def ADD(x,y):x = list(x)y = list(y)l = abs(len(x) - len(y))for i in range(l):if len(x)>len(y):y.insert(0,0)else:x.insert(0,0)c = []r = 0for xx, yy in zip(x[::-1],y[::-1]):ss = int(xx)+int(yy)+rif ss>=10:r = ss//10else:r = 0c.insert(0,str(ss%10))c.insert(0,str(r))return int(''.join(c))for i in range(n+2,m+1):dp[i] = ADD(str(dp[i-1]),str(dp[i-2])) # print(type(dp[m])) print(dp[m])
4.惊掉下巴的解法
用python解题的时候还是不能太用C++的思想去,python实在是强大。
n, m = map(int, input().split()) dp = ['0' for _ in range(m + 10)] dp[n] = 1 dp[n + 1] = 1 for i in range(n + 2, m + 1):dp[i] = dp[i - 1]+dp[i - 2] print(dp[m])