动态规划--牛客网19校招--魔法深渊
发布日期:2021-04-30 21:02:49 浏览次数:84 分类:精选文章

本文共 735 字,大约阅读时间需要 2 分钟。

为了解决月神爬出深渊的问题,我们可以使用动态规划来计算爬出每个台阶数的方法数。每次只能爬2的整数次幂个台阶,因此我们需要考虑所有可能的爬法组合。

方法思路

  • 问题分析:月神每次可以爬1、2、4、8等台阶。我们需要计算爬出N层台阶的所有可能方法数。
  • 动态规划递推关系:定义dp[n]为爬出n层台阶的方法数。每个dp[n]可以通过前面所有可能的步数(2^k)的结果累加得到。
  • 初始化:dp[0] = 1(爬0层的方法数),dp[1] = 1(爬1层的方法数)。
  • 填充dp数组:对于每个n,从2到1000,计算dp[n]为dp[n-1] + dp[n-2] + ...,直到步数超过n。
  • 处理输入输出:读取多个测试用例,输出结果。
  • 解决代码

    MOD = 10**9 + 3max_n = 1000dp = [0] * (max_n + 1)dp[0] = 1dp[1] = 1for i in range(2, max_n + 1):    t = 1    while t <= i:        dp[i] += dp[i - t]        dp[i] %= MOD        t *= 2M = int(input())for _ in range(M):    n = int(input())    print(dp[n] % MOD)

    代码解释

  • 初始化dp数组初始化为1001个元素,dp[0]和dp[1]分别设为1。
  • 动态规划计算:从2到1000依次计算每个dp[i],累加所有可能的步数(2^k)的结果,取模处理。
  • 处理输入:读取测试用例数量M,逐个读取每个N,输出对应的dp[N]结果。
  • 这种方法确保了计算的高效性和正确性,避免了递归的超时问题。

    上一篇:题目 1122: [C语言训练]亲密数 题解
    下一篇:【Notes11】前后端,数据库总结,集成电路IC设计,hadoop和hive

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2026年06月18日 06时02分23秒