台阶问题
题目描述
有 N N N 级台阶,你一开始在底部,每次可以向上迈 1 ∼ K 1\sim K 1∼K 级台阶,问到达第 N N N 级台阶有多少种不同方式。
输入格式
两个正整数 N , K N,K N,K。
输出格式
一个正整数 a n s ( m o d 100003 ) ans\pmod{100003} ans(mod100003),为到达第 N N N 级台阶的不同方式数。
样例 #1
样例输入 #1
5 2
样例输出 #1
8
提示
- 对于 20 % 20\% 20% 的数据, 1 ≤ N ≤ 10 1\leq N\leq10 1≤N≤10, 1 ≤ K ≤ 3 1\leq K\leq3 1≤K≤3;
- 对于 40 % 40\% 40% 的数据, 1 ≤ N ≤ 1000 1\leq N\leq1000 1≤N≤1000;
- 对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 100000 1\leq N\leq100000 1≤N≤100000, 1 ≤ K ≤ 100 1\leq K\leq100 1≤K≤100。
我的代码
#include<bits/stdc++.h>
using namespace std;
const int mod=100003;
int n,k,a[1000000],ans=0;
int main(){
cin>>n>>k;
a[0]=a[1]=1;
for(int i=2;i<=n;++i){
if(i<k){
a[i]=(a[i-1]*2)%mod;
}
else{
a[i]=(a[i-1]*2-a[i-k-1])%mod;
}
}
ans=(a[n]+mod)%mod;
cout<<ans;
return 0;
}