台阶的走法

mac2025-11-28  15

题目描述

  楼梯有n阶,可以一步上一阶、两阶或三阶,问有多少种不同的走法   由于答案很大,mod(1e9+7)输出

输入数据

  一个正整数n,代表楼梯的阶数,n<=1000000

输出数据

  方案数

样例输入 3 样例输出 4
程序分析
解题思路
第一种解法,使用递归的思想第二种解法,利用哈希算法第三者解法,使用动态规划 边界:dp[1] = 1 dp[2] = 2 dp[3] = 4 转移方程:dp[n] = dp[n-1]+dp[n-2]+dp[n-3] (n>=4) 最优子结构:比如 dp[8] = dp[7]+dp[6]+dp[5],则dp[7]与dp[6]与dp[5]就是dp[8]的最优子结构和之模等于模之和
代码
def f(lou): if lou == 1: print(1) return elif lou == 2: print(2) return elif lou == 3: print(4) return else: a, b, c = 1, 2, 4 for i in range(4, lou+1): a, b, c = b, c, (a+b+c)% (pow(10, 9)+7) print(c) n = int(input()) f(n) import java.util.Scanner; public class Main2 { public static long dp(int n){ if(n==1) return 1L; if(n==2) return 2L; if(n==3) return 4L; long a = 1L; long b = 2L; long c = 4L; long temp= 0; for(int i=4;i<=n;i++){ temp = (long) ((a+b+c) % (1e9+7)); a=b; b=c; c=temp; } return c; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); System.out.println(dp(n)); } }
最新回复(0)