题目描述
有 N 级台阶,你一开始在底部,每次可以向上迈 1∼K 级台阶,问到达第 N 级台阶有多少种不同方式。
输入格式
两个正整数 N,K。
输出格式
一个正整数 ans(mod100003),为到达第 N 级台阶的不同方式数。
输入输出样例
输入 da#1
5 2
输出 #1
8
规律:
当n<=k时,第N项=(上一项*2)%100003;
当n>k时 ,第N项=(上一项*2-第n-1-k项)%100003;
#include<bits/stdc++.h>
using namespace std;
int n,k,a[100005];
int main()
{
cin>>n>>k;
a[0]=1;//0和1直接=1
a[1]=1;
for(int i=2;i<=n;i++)//从2开始
{
if(i<=k)a[i]=(a[i-1]*2)%100003;//递推式
else a[i]=(a[i-1]*2-a[i-k-1])%100003;//递推式*2
}
cout<<(a[n]+100003)%100003;//输出
return 0;
}