zoukankan      html  css  js  c++  java
  • 动态规划的楼层算法

    这是一种常用的算法,本人摸索出一个规律:
    就是 n层阶梯,每次最多m个台阶,一共有F(n) = F(n-1) + F(n-2)+ F(n-m)种走法,或者把上楼层想象为下楼!!!
    理论在这:http://www.cnblogs.com/CCBB/archive/2009/04/25/1443441.html


    #
    -*- coding:utf8 -*- class Algorithm: stairs = 10 maxSteps = 2 def calNStep(self, stairs, append=''): if len(append) == Algorithm.stairs: print(append) if stairs < 2: return stairs steps=0 for i in range(self.maxSteps): j=i+1 steps += self.calNStep(stairs - j, append+str(j)*j ) return steps algo = Algorithm() total=algo.calNStep(Algorithm.stairs) print("%d层阶梯,每次最多%d个台阶,一共有%d种走法" %(Algorithm.stairs,Algorithm.maxSteps,total)) # Algorithm.maxSteps=3 # total=algo.calNStep(Algorithm.stairs) # print("%d层阶梯,每次最多%d个台阶,一共有%d种走法" %(Algorithm.stairs,Algorithm.maxSteps,total))
    /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/wuqj/PycharmProjects/testPy/step.py
    1111111122
    1111112222
    1111122122
    1111221122
    1111222222
    1112211122
    1112212222
    1112222122
    1122111122
    1122112222
    1122122122
    1122221122
    1122222222
    1221111122
    1221112222
    1221122122
    1221221122
    1221222222
    1222211122
    1222212222
    1222222122
    2211111122
    2211112222
    2211122122
    2211221122
    2211222222
    2212211122
    2212212222
    2212222122
    2222111122
    2222112222
    2222122122
    2222221122
    2222222222
    10层阶梯,每次最多2个台阶,一共有55种走法
    
    Process finished with exit code 0
    

    我总结了斐波那契数列算法分析的规律, 用python写了一个,希望对大家有帮助。

    图:

           简单说,就是斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

    递推公式

    斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
    如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2)
    显然这是一个线性递推数列
     

    另外斐波那契数列在实际工作中应该用的很少,尤其是当数据n很大的时候(例如:1000000000),所以综合考虑基本普通的非递归O(n)方法就很好了,没有必要用矩阵乘法。

        

     
  • 相关阅读:
    POJ2723 Get Luffy Out解题报告tarjan+2-SAT+二分
    poj2186Popular Cows+tarjan缩点+建图
    KMP模板
    洛谷P1939【模板】矩阵加速(数列)+矩阵快速幂
    矩阵快速幂模板
    codeforce#483div2D-XOR-pyramid+DP
    codeforce#483div2C-Finite or not?数论,GCD
    codeforce978C-Almost Arithmetic Progression+暴力,枚举前两个数字的情况
    codeforce440C-Maximum splitting-规律题
    LuoGu-P2863牛的舞会The Cow Prom[tarjan 缩点模板]
  • 原文地址:https://www.cnblogs.com/sunsky303/p/6475900.html
Copyright © 2011-2022 走看看