时间限制:1秒 内存限制:128M
题目描述
有 N 级台阶,你一开始在底部,每次可以向上迈 1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。
输入描述
两个正整数 N,K(1≤N≤105,1≤K≤100)。
输出描述
一个正整数 ans mod 100003,为到达第 N级台阶的不同方式数。
样例输入
5 2
样例输出
8
思路解析
本题基本思想是递推,找出递推条件即可
AC代码
#include<iostream>
using namespace std;
int main(){
long long n,k,a[100005];
cin>>n>>k;
a[0]=0,a[1]=1;
if(k==1){
cout<<1;
return 0;
}
for(int i=2;i<=k;i++){//前半部分
for(int j=0;j<=k&&i-j>0;j++){
a[i]+=a[i-j];
}
a[i]=(a[i]+1)%100003;
}
for(int i=k+1;i<=n;i++){//后半部分
for(int j=0;j<=k;j++){
a[i]+=a[i-j];
}
a[i]=a[i]%100003;
}
cout<<a[n];
return 0;
}