10.16腾讯笔试-第五题跳台阶
n级台阶,相邻两次的步数要奇偶性相异,问方法数。
如4级台阶有两种方案:
1+2+1
4
思想就是dp,然后优化下,奇偶项求和不要每次都重新求。
数学逻辑:
记f0(n)为最后一步走偶数步,上n级台阶的方法数
然后f0(n) = f0(n-2) + f0(n-4) + ...
if n是偶数,f0(n)++
同样的定义f1(n)为最后一步走奇数的方法数
有了递推关系,然后dp求解就可以了
代码:
这代码没注释铁定没啥人看得懂吧……
n = int(input().strip())
BIGNUM = 10**9 + 7
# dp = [[None] * (n+1) for _ in range(2)]
dp = [[0,0],[0,0]]
ans = 0
for x in range(1,n + 1):
f0 = dp[1][x % 2] + (x+1) % 2
f1 = dp[0][(x+1) % 2] + x % 2
dp[0][x % 2] += f0
dp[0][x % 2] %= BIGNUM
dp[1][x % 2] += f1
dp[1][x % 2] %= BIGNUM
if x == n:
ans = f0+f1
print(ans % BIGNUM)#腾讯##腾讯笔试##校招##秋招#