题目描述
有 N 级台阶,你一开始在底部,每次可以向上迈1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。
题目限制
输入格式
两个正整数 N,K。
输出格式
一个正整数 ans (mod100003),为到达第 N 级台阶的不同方式数。
输入输出样例
解题思路
本题运用递推,用数组从小到大求出到达第n级台阶的不同方法,从最后一步看,可得出f[n]=f[n-1]+f[n-2]+.....+f[n-k]
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,k,f[100001]={1,1};
cin>>n>>k;
for(int i=2;i<=n;i++) //表示走到当前阶数的方式总和
{
for(int j=1;j<=k;j++) //每次走法有几种可能
{
if(i>=j)
f[i]=(f[i]+f[i-j])%100003; //当最后一步跨j时(每次最后一步固定),前面走台阶的方式总和为f[i-j],把每种走法的总和加起来,内层循环结束得第i层阶梯的总走法
}
}
cout<<f[n];
return 0;
}