【台阶问题】
题目描述
有 N 级的台阶,你一开始在底部,每次可以向上迈最多 K 级台阶(最少 1 级),问到达第 N 级 台阶有多少种不同方式。输入
多组输入,两个正整数N(N ≤ 1000),K(K ≤ 100)。
输出
一个正整数,为不同方式数,由于答案可能很大,你需要输出 ans mod 100003 后的结果。
dp[n]由dp[n-1] +dp[n-2]+ ... +dp[n-k]而来。
#include <bits/stdc++.h> using namespace std; int dp[1010]; int main() { int n,k; while(~scanf("%d%d",&n,&k)) { memset(dp,0,sizeof(dp)); dp[0]=1; for(int i=1; i<=n; i++) for(int j=1; j<=k&&(i-j)>=0; j++) dp[i] = (dp[i]+dp[i-j]) % 100003; printf("%d\n",dp[n]); } return 0; }