目录
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 ans if step == n: ans += 1 return for i in d: di = step+i if 0<di<=n and flag[di] == 0: flag[di] = 1 fun(di) flag[di] = 0 fun(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//10 else: r = 0 C.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 = 0 for xx, yy in zip(x[::-1],y[::-1]): ss = int(xx)+int(yy)+r if ss>=10: r = ss//10 else: r = 0 c.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])