洛谷 P1192 标签问题
问题描述
- 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式
输入格式
- 两个正整数N,K
输出格式
- 一个正整数,为不同方式数,由于答案可能很大,你需要输出ans mod 100003后的结果
输入输出样例
首先考虑当k=2时的情况,可以得到一个斐波那契数列,即F(i) = F(i-1)+F(i-2);
对上式可以解释为:
如要前往第10阶,唯二种可能是从第9阶或第8阶登上去,设到达第9阶需要F(9)种情况,到达第8阶需要F(8)种,F(10) = F(9)+F(8);
扩展一下,达到题目要求,即可得到答案
#include<iostream>
#include"math.h"
#include<stdio.h>
using namespace std;
const int N = 100005;
int a[N];
int main() {
int n,k;
cin>>n>>k;
a[0] = 1;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=k&&j<=i;j++){
a[i] = (a[i]+a[i-j])%100003;
}
}
cout<<a[n]<<endl;
return 0;
}