台阶问题

题目描述

有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。

输入输出格式

输入格式:

 

两个正整数N,K。

 

输出格式:

 

一个正整数,为不同方式数,由于答案可能很大,你需要输出ans \bmod 100003后的结果。

 

输入输出样例

输入样例#1: 复制

5 2

输出样例#1: 复制

8

 

#include<stdio.h>
#define N 100003
long long a[100001];
int main(){
	int n,k;
	scanf("%d %d",&n,&k);
	a[0]=a[1]=1;
for(int i=2;i<=n;i++){
		if(i<=k)
		a[i]=a[i-1]*2%N;  //这是神马递推式,自己体会
		else {
			a[i]=a[i-1]*2-a[i-k-1];
			a[i]%=N;
		}
	}
	printf("%lld\n",(a[n]+N)%N);  //这里如果a[n]<0;就得加上N;我也不是为啥
		return 0;
}