题目描述
有 N 级的台阶,你一开始在底部,每次可以向上迈最多 K 级台阶(最少 1 级),问到达第 N 级台阶有多少种不同方式。
输入
多组输入,两个正整数N(N ≤ 1000),K(K ≤ 100)。
输出
一个正整数,为不同方式数,由于答案可能很大,你需要输出 ans mod 100003 后的结果。
样例输入
5 2
样例输出
8
链接没找到TAT
思路:一时间没想出来,也忘记写博客了,现在补补。
提供一个队友的思路。(✿◕‿◕✿)
代码:
#include<stdio.h>
#include<string.h>
long long int dp[1005];
int main()
{
int n,k,i,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(dp,0,sizeof(dp));
dp[0]=1,dp[1]=1;
for(i=1;i<=n;i++){
if(i<=k){
dp[i]=1;
for(j=2;j<=i;j++){
dp[i]*=2;
}
dp[i]=dp[i]%100003;
}
else{
for(j=1;j<=k;j++){
dp[i]+=dp[i-j]%100003;
}
dp[i]=dp[i]%100003;
}
}
printf("%lld\n",dp[n]);
}
return 0;
}