Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。
【输入格式】
输入文件stair.in的仅包含两个正整数N,K。
【输出格式】
输入文件stair.out仅包括1个正整数,为不同方式数,由于答案可能很大,你需要输出mod 100003后的结果。
【数据规模】
对于20%的数据,有N ≤ 10, K ≤ 3; 对于40%的数据,有N ≤ 1000; 对于100%的数据,有N ≤ 100000,K ≤ 100。
Sample Input1
5 2
Sample Output1
8
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u127
【题解】
不管一次能上几个阶梯
f[n] = f[n-1]+f[n-2]+..+f[n-k];
边界
f[0] = 1,f[1] = 1;(因为k为正整数)
【完整代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 1e5+10;
const int MOD = 1e5+3;
int n,k;
int f[MAXN];
int main()
{
scanf("%d%d",&n,&k);
f[0] = 1;f[1] = 1;
for (int i = 2;i <= n;i++)
for (int j = max(i-k,0);j <= i-1;j++)
f[i] = (f[i]+f[j])%MOD;
printf("%d
",f[n]);
return 0;
}