题解 P1192 【台阶问题】
一开始想到的是普通动态规划,和经典走台阶一样的套路,但是好像会很复杂,就把之前k个台阶走法的总数保存为一个sum,就是当前台阶的走法总数。
#include <bits/stdc++.h>
using namespace std;
int n,k;
const int mod=100003;
int a[100005];
int main(){
cin >> n >> k;
a[0] = a[1] = 1;
int i = 0;
int j = 1;
int sum = 1;
while(j <= n){
sum %= mod;
a[j] = sum;
sum += a[j];
if(j - i < k){
j ++;
}
else if(j - i >= k){
sum -= a[i];
i ++;
j ++;
}
}
cout << (a[n] + mod) % mod;
}