英文:
Time Limit:0.2s Memory Limit:32M
Description
Every time you can climb one step or two steps,please calculate how many ways you can climb the final steps.
Input
One integer n (The number of steps) 1<=n<=80
Output
One integer.
Sample Input
2
Sample Output
2
中文:
时间:0.2s 空间:32M
题目描述:
你站在一段楼梯面前,陷入了沉思,你每次可以跨两级,或者跨一级,问你走到最后一级台阶一共有多少种不同的走法。
输入格式:
输入一个整数n,表示台阶的数量
输出格式:
输出一个整数
样例输入:
2
样例输出:
2
约定:
1<=n<=80
提示:
这道题的其实一眼就看出是斐波那契数列,开long long勉强可以装的下。所以是一道递归的题。但是其中的原理是什么呢?在博主看来,是极简单的动态规划(DP)。其中,a[i]表示到第i级台阶的方案总数。根据题意,动态转移方程式是:a[i]=a[i-1]+a[i-2] (i>2),答案为a[n]。代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 100
long long a [ N ] , n ;
using namespace std ;
int main ( )
{
cin >> n ;
a [ 0 ] = 0 ;
a [ 1 ] = 1 ;
a [ 2 ] = 2 ;
for ( int i = 3 ; i <= n ; i ++ ) a [ i ] = a [ i - 1 ] + a [ i - 2 ] ;
cout << a [ n ] ;
return 0 ;
}
相关链接:
XJOI 题解小全:
https://blog.csdn.net/zj_mrz/article/details/80949787
XJOI 1210 二项式展开 题解:
https://blog.csdn.net/zj_mrz/article/details/80969339