XJOI 3265 Climb the stairs 爬楼梯 题解

英文:

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

猜你喜欢

转载自blog.csdn.net/zj_mrz/article/details/80970052