【DP】爬楼梯

虽然这是一道水题DP,但是

还是在杨老师的帮助下完成了题目。

题目描述:

蒜头君要爬一个有 nn 个台阶的楼梯。蒜头君一步可以走 11 个台阶或 22 个台阶。现在蒜头君想请你帮忙算下,一共会有多少种不同的爬楼梯方法?

输入格式

输入一行,输入一个正整数 n(1 \leq n \leq 70)n(1≤n≤70),代表一共有 nn 个台阶。

输出格式

输出一行,输出一个整数,表示一共有多少种不同的爬楼梯方法。

样例输入

3

样例输出

3

提示信息

样例有 33 个台阶,蒜头君可以有以下 33 种走法:

  1. 1->1->11−>1−>1
  2. 1->21−>2
  3. 2->12−>1

#include <iostream>
using namespace std;
long long n,tot=0,f[10001];  //不开LL的话 后面数据太大
int main()
{
cin>>n;  //n是边界
f[1] = 1; //f【1】表示 第1阶梯的状态
f[2] = 2;//f【2】表示 第2阶梯的状态
for (int i = 3; i <= n; ++i) {
    f[i] = f[i - 1] + f[i - 2];  //这里表示 此时状态等于前两个状态之和
}
cout<<f[n]<<endl;
return 0;
} 

爬楼梯

时间: 2024-10-28 20:16:17

【DP】爬楼梯的相关文章

爬楼梯(DP)

爬楼梯 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 261  Solved: 137 [Submit][Status][Web Board] Description 小时候我们都玩过爬楼梯的游戏:两人猜拳,赢了可向上爬一级,谁先到最高级则获胜.作为大学生,我们应该玩一个更有水平的游戏. 现在一个人要上n级楼梯,每一步可以选择上一级或者上两级,但是不能后退.求上这n级楼梯的方案数. Input 第一行只有一个整数T(1<=T<=45),表示数据

爬楼梯(LintCode)

爬楼梯 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 样例 比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法 返回 3 用递归又超时了..于是又换了DP,dp并不熟悉,于是又搞了好久. 首先向右是跳一格,向下是跳两格,dp[j]是到达(i,j)的不同的路径数,把每一行最左的剩余步数为0的点的路径数求和就是答案. 1 public class Solution { 2 /** 3 * @param n: An integer

校招真题练习006 爬楼梯(小米)

爬楼梯 题目描述在你面前有一个n阶的楼梯,你一步只能上1阶或2阶.请问计算出你可以采用多少种不同的方式爬完这个楼梯. 输入描述:一个正整数n(n<=100),表示这个楼梯一共有多少阶输出描述:一个正整数,表示有多少种不同的方式爬完这个楼梯 1 n = int(input().strip()) 2 if n == 1: 3 print('1') 4 elif n == 2: 5 print('2') 6 else: 7 dp = [0] * (n+1) 8 dp[1] = 1 9 dp[2] =

动态规划(斐波那契系列)---爬楼梯

动态规划 ??递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保留了子问题的解,避免了重复计算. 爬楼梯 70. Climbing Stairs (Easy) 题目描述: ??有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法. 思路分析: ??定义一个dp数组存储上楼梯的方法数,dp[i]表示走到第i层楼的方法数,第i层楼梯可以从第i-1层和i-2个楼梯再走一步到达.那么走到第i层楼梯的方式为走到第i-1层的方式和第i-2层的方式和. dp[ i

LeetCode 题解 | 70. 爬楼梯

假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶. 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶. 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 Code class Solution { public: int climb

菜鸡学算法--70. 爬楼梯

先来看题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方法可以爬到楼顶.1. 1 阶 + 1 阶2. 2 阶 示例 2: 输入: 3输出: 3解释: 有三种方法可以爬到楼顶.1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶 作为一个菜鸡,看到题目直接懵逼,思路混乱. 解题大招: 首先,计算可执行的逻辑最后

Leetcode -- 爬楼梯(70)

题目描述:假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶? 思路:分为两种情况,最后一步爬1个台阶或者最后一步爬2个台阶,二者之和即为所有的可能的方法.首先想到了递归算法,很不幸的是当n=38时就已经超时了.另外两种方法,斐波拉契数列以及动态规划法. 思路一:动态规划法 初始化dp[0]=0,dp[1]=1.dp[n]=dp[n-1]+dp[n-2] 1 class Solution: 2 def climbStairs(self

回溯解决爬楼梯问题

1.问题描写叙述 每次爬楼梯有每次可跨1,2,3步.爬上一个N阶楼梯有多少种方式,打印出每种方式. 2.源码 // ConsoleApplication6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <vector> #include <map> using namespace std; typedef std::vector<int> V

爬楼梯问题

// 爬楼梯.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include<iostream>using namespace std; int main(){ int n; cin >> n; int a = 1, b = 1, k = 0; if (n == 1 || n == 0) {  cout<<1; } while (--n > 0) {  k = a + b;  b = a;  a = k;