[Algorithm -- Dynamic Programming] Recursive Staircase Problem
For example there is a staricase
N = 3
| ---|
|---| |
|---| |
---| |
There is N = 3 staricase, for each step, you can either take {1 or 2} step at a time. So asking how many ways you can get on N = 3 step:
Answer: should be 3 ways: {1,1,1,}, {1,2}, {2,1}.
Now assue N=0, there is only 1 way, writing a function which takes number N and return the number of ways to get on Nth step.
Solution: The solution can involve recursion. We can use Dynamice programming, bottom up approach:
function num_ways_bottom_ip(n) {
let nums = [];
if (n === 0 || n === 1) {
return 1;
}
nums[0] = nums[1] = 1;
for (let i = 2; i <= n; i++) {
nums[i] = nums[i - 1] + nums[i - 2];
}
return nums[n];
}
console.log(num_ways_bottom_ip(5)); //
This now takes O(N * |X|) time and O(N) space. X is the step allow to take , in our case, is 2.
Now if the requirements changes form only take {1, 2} steps, to you can take {1,3,5} each at a time; How you could solve the problem;
The idea is pretty similar to {1,2} steps.
nums(i) = nums(i-1) + nums(i-2):
Therefore for {1.3.5} is equals:
nums(1) = nums(i-1) + nums(i-3) + nums(i-5)
We just need to make sure i-3, i-5 should be greater than 0.
function num_ways_bottom_up_X(n, x) {
let nums = [];
if (n === 0) {
return 1;
}
nums[0] = 1;
for (let i = 1; i <= n; i++) {
let total = 0;
for (let j of x) {
if (i - j >= 0) {
total += nums[i - j];
}
}
nums[i] = total;
}
return nums[n];
}
console.log(num_ways_bottom_up_X(5, [1,3,5])); //
[Algorithm -- Dynamic Programming] Recursive Staircase Problem的更多相关文章
- hdu 1159, LCS, dynamic programming, recursive backtrack vs iterative backtrack vs incremental, C++ 分类: hdoj 2015-07-10 04:14 112人阅读 评论(0) 收藏
thanks prof. Abhiram Ranade for his vedio on Longest Common Subsequence 's back track search view in ...
- [Algorithm -- Dynamic programming] How Many Ways to Decode This Message?
For example we have 'a' -> 1 'b' -> 2 .. 'z' -> 26 By given "12", we can decode t ...
- Algorithm: dynamic programming
1. Longest Increasing Subsequence (LIS) problem unsorted array, calculate out the maximum length of ...
- [Algorithm] Dynamic programming: Find Sets Of Numbers That Add Up To 16
For a given array, we try to find set of pair which sums up as the given target number. For example, ...
- hdu 4972 A simple dynamic programming problem(高效)
pid=4972" target="_blank" style="">题目链接:hdu 4972 A simple dynamic progra ...
- HDU-4972 A simple dynamic programming problem
http://acm.hdu.edu.cn/showproblem.php?pid=4972 ++和+1还是有区别的,不可大意. A simple dynamic programming proble ...
- 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)
动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...
- [Algorithms] Using Dynamic Programming to Solve longest common subsequence problem
Let's say we have two strings: str1 = 'ACDEB' str2 = 'AEBC' We need to find the longest common subse ...
- Dynamic Programming
We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...
随机推荐
- SpringBoot 热部署 和 热加载
这个是我放在博客园中的内容截图地址,可以点击查看 http://www.cnblogs.com/chenshuquan/gallery/image/202752.html
- April Fools Day Contest 2016 D. Rosetta Problem
D. Rosetta Problem 题目连接: http://www.codeforces.com/contest/656/problem/D Description ++++++++[>+& ...
- 《python学习手册》第34章 异常对象
基于字符串的异常 python在2.6之前可以使用字符串来定义异常,并且是通过对象标识符来匹配的(即通过is 而不是==) myexc = "My excetion string" ...
- 【转】如何修改maven工程jdk版本
1.使用maven的时候,默认会使用1.5版本的JDK,并且也是编译成1.5的,我的电脑里面用的JDK是1.7的,1.8也出来了,没理由还用1.5的吧!所以我手动改成了1.7,郁闷的是,每次 mave ...
- ubuntu 关闭n卡
ubuntu对n卡支持不好,电脑耗电和发汤,把它关闭掉 #sudo add-apt-repository ppa:bumblebee/stable#sudo apt-get update#su ...
- Autocomplete TEdit
http://forum.codecall.net/topic/75946-autocomplete-tedit/ Overview Autocomplete feature really helpf ...
- PWM DAC Low Pass Filtering
[TI博客大赛][原创]LM3S811之基于PWM的DAC http://bbs.ednchina.com/BLOG_ARTICLE_3005301.HTM http://www.fpga4fun.c ...
- Spring SimpleJdbcTemplate查询示例
这里有几个例子来说明如何使用SimpleJdbcTemplate query()方法来查询或从数据库中提取数据.在 JdbcTemplate query() 方法,需要手动转换返回的结果转换为一个目标 ...
- 要使用C#实现一个ActiveX控件
要使用C#实现一个ActiveX控件,需要解决三个问题: 1.使.NET组件能够被COM调用 2.在客户机上注册后,ActiveX控件能通过IE的安全认证 3.未在客户机上注册时,安装包能通过IE的签 ...
- find命令专辑
find命令使用技巧 查找文件,移动到某个目录 使用find和xargs 15条 linux Find 命令实际使用方法 find 命令用法 find命令使用经验 find用法小结 find与xarg ...