递推问题,要用到递推式:
设f(n)为n个台阶的走法总数,把n个台阶的走法分成k类:
第1类:第1步走1阶,剩下还有n-1阶要走,有f(n-1)种方法;
第2类:第1步走2阶,剩下还有n-2阶要走,有f(n-2)种方法;
第3类:第1步走3阶,剩下还有n-3阶要走,有f(n-3)种方法;
.......... ...........
第k类:第1步走k阶,剩下还有n-k阶要走,有f(n-k)种方法;
根据加法原理:f(n)=f(n-1)+f(n-2)+.......+f(n-k)
程序如下:
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; int f[100000]; int main() { int n,k; cin>>n>>k; f[0]=1; for(int i=1;i<=n;i++) for(int j=1;j<=k&&i-j>=0;j++) //i-j>=0必须要有 { f[i]+=f[i-j]; f[i]%=100003; } cout<<f[n]; return 0; }