题目描述
有 �N 级台阶,你一开始在底部,每次可以向上迈 1∼�1∼K 级台阶,问到达第 �N 级台阶有多少种不同方式。
输入格式
两个正整数 �,�N,K。
输出格式
一个正整数 ���(mod100003)ans(mod100003),为到达第 �N 级台阶的不同方式数。
输入输出样例
输入 #1复制
5 2
输出 #1复制
8
#include <bits/stdc++.h>
using namespace std;
int dp[100010]={};
int mod=100003;
int main()
{
int n,k,ans=0;
cin>>n>>k;
dp[0]=dp[1]=1;//必须加dp[0]的值,因为dp[n]=dp[0~n-1]
for(int i=2;i<=n;i++){
if(n<=k) dp[i]=(dp[i-1]*2)%mod;
else dp[i]=(dp[i-1]*2-dp[i-1-k])%mod;递推式(高人指点,非原创)找规律
}
ans=(dp[n]+mod)%mod;
cout<<ans;
return 0;
}