题目描述
N级台阶,一开始在底部,每次可以向上迈 1∼K 级台阶,问到达第 N级台阶有多少种不同方式。
输入格式
两个正整数 N,K。
输出格式
一个正整数 ans(mod100003),为到达第 N 级台阶的不同方式数。
输入输出样例
说明/提示
代码思路:
假如每次可以向上迈2个台阶,那么要达到第5个台阶就有这样两种可能:从第4个台阶向上走1步或者第3个台阶向上走2步。
这一看就是典型的动态规划思想:
(1)动态规划其实就是,给定一个问题,把它拆成一个个子问题,直到子问题可以直接解决。然后再把子问题答案保存起来,以减少重复计算,根据子问题答案反推,得出原问题解的一种方法。
(2)动态规划最核心的思想,就在于拆分子问题,记住过往,减少重复计算。
代码实现:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int temp[100010] = {0};
temp[0] = 1;
temp[1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= k; j++) {
if (i >= j) {
temp[i] = (temp[i] + temp[i - j]) % 100003;
}
}
}
cout << temp [n] << endl;
return 0;
}