有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。
两个正整数N,K。
一个正整数,为不同方式数,由于答案可能很大,你需要输出\(ans \bmod 100003\)后的结果。
5 2
8
对于20%的数据,有\(N ≤ 10, K ≤ 3\);
对于40%的数据,有\(N ≤ 1000\);
对于100%的数据,有\(N ≤ 100000,K ≤ 100\)。
#include <iostream>
using namespace std;
int n,k,a[100001];
int solve(int x) {
if(x==n)
return 1;
if(a[x])
return a[x];
for(int i=1;i<=k&&x+i<=n;++i)
a[x]+=solve(x+i);
a[x]%=100003;
return a[x];
}
int main() {
cin>>n>>k;
cout<<solve(0)<<endl;
return 0;
}
原文:https://www.cnblogs.com/yuzec/p/12986745.html