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)
#腾讯##腾讯笔试##校招##秋招#
全部评论
第五题跳台阶
点赞 回复 分享
发布于 2022-10-17 16:45 河南

相关推荐

评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务