|
蓝森林 http://www.lslnet.com 2006年6月6日 10:18
[求助] 关于走楼梯算法的实现
1. 一个人走楼梯,可以一次走1层,也可以走2层,也可以走3层,问50层有多少种方法。
请问这个属于那个经典的算法?
谁能帮我提供一点思路 |
背包算法 |
f(n) = f(n-1) + f(n-2) + f(n-3) n>=1
f(0)=1
f(-1)=f(-2)=0
可以当成非波纳妾数列的推广形式 |
有点像旅行者问题
扩展每个结点时都有3条路径
当源点到结点为50时,count+1,停止扩展该结点
小于50时,继续扩展
大于50时,停止扩展
直到没有可扩展的结点
好象时间复杂度太....
|
好 |
我不懂上面各位的算法。我提个高中阶段的解法吧,你设想把所以的方案归类,(n1,n2,n3)代表每种类的含1的个数,2的个数,3 的个数。所有的,(n1,n2,n3)这个很容易用循环得到,接下来是对每种,(n1,n2,n3)的排序给出实际的步法,排序要复杂些,依照乘法原理和加法原理可以一步一步的排但是写算法肯定有点复杂,我正在设想用交换的方式给出一个简单的算法
|
f(n) = f(n-1) + f(n-2) + f(n-3) n>=1
简单说一下我的思路
假如你要走到第 X 层
你可以从第 X-1 层一次走一步上去
也可以从第 X-2 层一次走两步上去
也可以从第 X-3 层一次走三步上去
而这三种走法是没有重复的 也没有遗漏的
所以走到第 X 层的走法总数
相当于走到 第X-1层 第X-2层 第X-3层 的走法的总和 |
楼上方法的不错,不知道楼主是不是只想得到步法的总数目,还是罗列出所有的步法 |
| |