以前我一直不知道怎么写这道题,现在明白了;
其实可以这样考虑,比如:k=2如果我在第i个阶梯上面,那么我的上一个阶梯就只能是i-1,i-2这两个阶梯,所以方案总数就应该是F[i]=F[i-1]+F[i-2];F[i]这里代表到达i阶梯的方案总数;所以按照这个思路我们就可以推出这个一个公式:
F[i]=F[i-1]+F[i-2]+F[i-3]+…+F[i-k];
所以整合一下就应该是这种:
我这里i>=1的哈,因为F[0]=1,因为站在原地本身就是一种;
与其说这道题是dp,其实我感觉dp也就是去找递推式,只不过复杂的dp可就没那么容易了;
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define Mod 100003
int F[100050];
int main(){
int n , k;
scanf("%d %d",&n,&k);
F[0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=min(i,k);j++){
F[i]=(F[i]+F[i-j])%Mod;
}
}
printf("%d\n",F[n]%Mod);
return 0;
}