1 条题解

  • 0
    @ 2025-8-24 22:56:11

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Star_Universe
    狂减发犇 | INFP-T | 称呼 SU | 代词使用他 | 愿此行,终抵群星 | 处女作 /article/wep12twg | 互关看心情,如果不想关注会用两小号回关,私信!

    搬运于2025-08-24 22:56:11,当前版本为作者最后更新于2024-03-17 19:53:10,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目传送门

    修改了思路里的一处笔误,望管理通过。

    题意

    就是让你求下 nn 级台阶时有一次下一级,一次下两级,一次下三级这三种方式,一共多少种走法,且顺序不同也算两种哦!要注意。

    递推思路

    就是一个简单的递推题,当 n=1n=1 时,那当然就是直接下一级台阶,当 n=2n=2 时,可以直接下两级,也可以下两个一级,当 n=3n=3 时,可以下三级,也可以先下一级再下两级,也可以先下两级后再下一级,也可以连续下三个一级,后面楼梯级数每增加一级方案数就是数组前三个元素的和,可得以下公式:

    aj=aj1+aj2+aj3a_j=a_{j-1}+a_{j-2}+a_{j-3}

    其实这个公式是很容易得到的,因为一次最多下三级楼梯,所以从上往下数第 jj 级楼梯可以从上面三级中任意一级走过来,自然就可以得到是方案数是上面三级楼梯方案数的和。

    递推代码

    #include<bits/stdc++.h> 
    using namespace std;
    
    long long a[1001];
    int n;
    int main(){
    	cin>>n;
    	a[0]=1;
    	a[1]=2;
    	a[2]=4;
    	for(int j=3;j<n;j++){
    	  	a[j]=(a[j-1]+a[j-2]+a[j-3]);
        }
    	cout<<a[n-1]<<endl;		
        return 0;
    }
    
    • 1

    信息

    ID
    9950
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者