20170801_动态规划之爬楼梯有多少不同的方法
来源:互联网 发布:软件证书挂靠 编辑:程序博客网 时间:2024/06/07 09:39
20170801_动态规划之爬楼梯有多少不同的方法
问题:爬楼梯的方法有多少种方法?
N 阶楼梯上楼问题:一次可以走1阶或2阶,问有多少种上楼方式。(要求采用非递归)
输入描述:
输入包括一个整数N, (1<=N<90)。
输出描述:
直接输出方法数。
分析:
1、这是一个动态规划问题(DP问题)。需要找出状态和状态转移方程。
2、设计一个结果表 res[N]。
- 根据题目中的问题“问有多少种上楼方式?”,可以直接得出状态res[i]。
- res[i] 表示:当有 i 层楼梯时,共有 res[i] 种方法。那么 res[i] 等于什么呢?
- 可以这样想:第一部分的最后一步是从第 i-1 层楼梯爬上第 i 层楼梯,这和 res[i-1] 一样;第二部分的最后一步是从第 i-2 层楼梯爬上第 i 层楼梯,这和 res[i-2] 一样。
- 所以状态转移方程:res[i] = res[i-1] + res[i-2]
3、有了状态和状态转移方程,就可以编码了。
//爬楼梯的方法有多少种// N 阶楼梯上楼问题:一次可以走1阶或2阶,问有多少种上楼方式。(要求采用非递归)//输入描述://输入包括一个整数N,(1<=N<90)。#include<iostream>#include<vector>#include<algorithm>using namespace std;class Solution{public:long long climbStairs(int n){//这是一个动态规划问题,可是使用DP算法求解 //设计一个结果表,并进行初始化//res(i)表示楼梯有i层时的爬楼梯方法,其中res(1)=1;res(2)=2;res(3)=3.//那么状态方程是:res(i)=res(i-1)+res(i-2)90>i>=3if(n<1 || n>=90)return 0;else{ vector<long long> res(n+1,0);if(n==1)res[1]=1;else{res[1]=1;res[2]=2;}for(int i=3; i<=n; ++i){res[i]=res[i-1]+res[i-2];}return res[n];} }};int main(void){int n=0;Solution object;long long res=0;while(cin>>n){res=object.climbStairs(n);cout<<res<<endl;}return 0;}
阅读全文
0 0
- 20170801_动态规划之爬楼梯有多少不同的方法
- 动态规划_爬楼梯
- (动态规划)求有多少种不同的凑法
- python动态规划_爬楼梯
- Climbing Stairs 爬楼梯方法 动态规划
- 蒜头爬楼梯-动态规划
- 动态规划: 爬楼梯问题
- 爬楼梯问题(动态规划)
- 【动态规划】爬楼梯问题
- LintCode:动态规划 爬楼梯
- 动态规划(爬楼梯问题)
- Lintcode-动态规划-爬楼梯
- 动态规划中篇:爬楼梯
- 动态规划--找零钱有多少种方法
- 动态规划_ 选出一些数相加,问最后是m的倍数的方案有多少种
- 爬楼梯问题,一共有n阶台阶,每次你可以走1或者2个台阶,到达顶端一共有多少种不同的走法?
- 楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上两阶,编写算法计算共有多少种不同的上楼梯的方法。
- java__假设你现在正在爬楼梯,楼梯有 nn 级。每次你只能爬 11 级或者 22 级,那么你有多少种方法爬到楼梯的顶部
- 设计模式之装饰者模式
- 上传文件
- 32day 新浪微博(授权 新特性)
- datacleaner第一部分,一、二、三章
- 欢迎使用CSDN-markdown编辑器
- 20170801_动态规划之爬楼梯有多少不同的方法
- 归并排序
- java 代理模式
- 游戏开发中的人工智能(十四):神经网络
- 从程序员小白到大神的正确打开方式!
- Mac 终于有显示隐藏文件的快捷键了
- go闭包
- Ref映射工具
- Base64对字符串的加密解密