测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33641. 走楼梯

填空题 困难

题目描述

走楼梯

题目描述

一段楼梯共有n 阶,小明每次最少走1 阶,最多走k 阶,请问小明共有多少种不同的走法可以走完这n 阶楼梯。

例如:n = 4,k = 2;楼梯共有4 阶,小明每次最多走2 阶;

有如下走法:

第一种:第一次走1 阶,第二次走1 阶,第三次走1 阶,第四次走1 阶;

第二种:第一次走1 阶,第二次走1 阶,第三次走2 阶;

第三种:第一次走1 阶,第二次走2 阶,第三次走1 阶;

第四种:第一次走2 阶,第二次走1 阶,第三次走1 阶;

第五种:第一次走2 阶,第二次走2 阶。

所以小明共有5 种不同的走法可以走完4 阶楼梯。

输入描述

一行输入两个整数n(1≤n≤5000)和k(1≤k≤10),分别表示这段楼梯的阶数及每

次最多可以走的楼梯阶数,整数之间以一个空格隔开

输出描述

输出一个整数,表示小明走完 n 阶楼梯共有多少种不同的走法

样例输入:

4    2

样例输出

5

参考答案

#include <bits/stdc++.h> using namespace std; int a[5005]; int main() { int n,k; cin>>n>>k; for(int i=1,t=0;i<=k;i++){//初始化前k阶 a[i]=1+t; t+=a[i]; } for(int i=k+1;i<=n;i++){//代入公式递推 a[i]=0; for(int j=1;j<=k;j++){ a[i]+=a[i-j]; } } cout<<a[n]; return 0; }
上一题 下一题