動(dòng)態(tài)規(guī)劃算法

動(dòng)態(tài)規(guī)劃的關(guān)鍵點(diǎn):

  1. 最優(yōu)化原理,也就是最優(yōu)子結(jié)構(gòu)性質(zhì)佳恬。這指的是一個(gè)最優(yōu)化策略具有這樣的性質(zhì)捏境,無(wú)論過(guò)去狀態(tài)和決策如何于游,對(duì)前面的決策所形成的狀態(tài)而言,余下的決策必須構(gòu)成最優(yōu)策略垫言,簡(jiǎn)單來(lái)說(shuō)就是一個(gè)最優(yōu)化策略的子策略總是最優(yōu)的贰剥,如果一個(gè)問(wèn)題滿(mǎn)足最優(yōu)化原理,就稱(chēng)其有最優(yōu)子結(jié)構(gòu)性質(zhì)筷频。
  2. 無(wú)后效性蚌成,指的是某個(gè)狀態(tài)下的決策的收益,只與狀態(tài)和決策相關(guān)凛捏,與達(dá)到該狀態(tài)的方式無(wú)關(guān)担忧。
  3. 子問(wèn)題的重疊性,動(dòng)態(tài)規(guī)劃將原來(lái)指數(shù)級(jí)的暴力搜索算法改進(jìn)到了具有多項(xiàng)式時(shí)間復(fù)雜度的算法坯癣,其中的關(guān)鍵在于解決了冗余瓶盛、重復(fù)計(jì)算的問(wèn)題,這是動(dòng)態(tài)規(guī)劃算法的根本目的示罗。
  4. 總體來(lái)說(shuō)惩猫,動(dòng)態(tài)規(guī)劃算法就是一系列以空間換取時(shí)間的算法。

動(dòng)態(tài)規(guī)劃使用

下面通過(guò)遞歸方式計(jì)算問(wèn)題斐波那契數(shù)列(Fibonacci sequence)來(lái)闡述分治法不是銀彈蚜点。

斐波那契數(shù)列指的是這樣一個(gè)數(shù)列 0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233帆锋,377,610禽额,987锯厢,1597,2584脯倒,4181实辑,6765,10946藻丢,17711剪撬,28657,46368........


斐波那契數(shù)列數(shù)學(xué)表示

這個(gè)數(shù)列從第3項(xiàng)開(kāi)始悠反,每一項(xiàng)都等于前兩項(xiàng)之和残黑。
下面給出遞歸實(shí)現(xiàn)的代碼:

    /**
     * 求解Fibonacci數(shù)列中第n個(gè)元素的值
     * @param n 斐波那契數(shù)列中的位置
     * @return Fibonacci數(shù)列中第n個(gè)元素的值
     */
    public int fibonacci(int n) {
        if(n<2) return n;
        if(n>=2) {
            return fibonacci(n-1)+fibonacci(n-2);
        }
        return -1;
    }

通過(guò)控制臺(tái)驗(yàn)證下算法的計(jì)算結(jié)果和計(jì)算用時(shí)。

fibonacci 0 is 0                計(jì)算用時(shí)        0ms
fibonacci 1 is 1                計(jì)算用時(shí)        1ms
fibonacci 2 is 1                計(jì)算用時(shí)        0ms
fibonacci 3 is 2                計(jì)算用時(shí)        0ms
fibonacci 4 is 3                計(jì)算用時(shí)        0ms
fibonacci 5 is 5                計(jì)算用時(shí)        0ms
fibonacci 6 is 8                計(jì)算用時(shí)        0ms
fibonacci 7 is 13               計(jì)算用時(shí)        0ms
fibonacci 8 is 21               計(jì)算用時(shí)        0ms
fibonacci 9 is 34               計(jì)算用時(shí)        0ms
fibonacci 10 is 55              計(jì)算用時(shí)        0ms
fibonacci 11 is 89              計(jì)算用時(shí)        0ms
fibonacci 12 is 144             計(jì)算用時(shí)        0ms
fibonacci 13 is 233             計(jì)算用時(shí)        0ms
fibonacci 14 is 377             計(jì)算用時(shí)        0ms
fibonacci 15 is 610             計(jì)算用時(shí)        0ms
fibonacci 16 is 987             計(jì)算用時(shí)        0ms
fibonacci 17 is 1597            計(jì)算用時(shí)        1ms
fibonacci 18 is 2584            計(jì)算用時(shí)        0ms
fibonacci 19 is 4181            計(jì)算用時(shí)        0ms
fibonacci 20 is 6765            計(jì)算用時(shí)        0ms
fibonacci 21 is 10946           計(jì)算用時(shí)        0ms
fibonacci 22 is 17711           計(jì)算用時(shí)        0ms
fibonacci 23 is 28657           計(jì)算用時(shí)        1ms
fibonacci 24 is 46368           計(jì)算用時(shí)        0ms
fibonacci 25 is 75025           計(jì)算用時(shí)        1ms
fibonacci 26 is 121393          計(jì)算用時(shí)        1ms
fibonacci 27 is 196418          計(jì)算用時(shí)        1ms
fibonacci 28 is 317811          計(jì)算用時(shí)        3ms
fibonacci 29 is 514229          計(jì)算用時(shí)        2ms
fibonacci 30 is 832040          計(jì)算用時(shí)        4ms
fibonacci 31 is 1346269         計(jì)算用時(shí)        8ms
fibonacci 32 is 2178309         計(jì)算用時(shí)        11ms
fibonacci 33 is 3524578         計(jì)算用時(shí)        20ms
fibonacci 34 is 5702887         計(jì)算用時(shí)        29ms
fibonacci 35 is 9227465         計(jì)算用時(shí)        46ms
fibonacci 36 is 14930352        計(jì)算用時(shí)        73ms
fibonacci 37 is 24157817        計(jì)算用時(shí)        127ms
fibonacci 38 is 39088169        計(jì)算用時(shí)        186ms
fibonacci 39 is 63245986        計(jì)算用時(shí)        306ms
fibonacci 40 is 102334155       計(jì)算用時(shí)        505ms
fibonacci 41 is 165580141       計(jì)算用時(shí)        816ms
fibonacci 42 is 267914296       計(jì)算用時(shí)        1298ms
fibonacci 43 is 433494437       計(jì)算用時(shí)        2110ms
fibonacci 44 is 701408733       計(jì)算用時(shí)        3423ms
fibonacci 45 is 1134903170      計(jì)算用時(shí)        5525ms
fibonacci 46 is 1836311903      計(jì)算用時(shí)        9013ms
fibonacci 47 is -1323752223     計(jì)算用時(shí)        14382ms

可以看出斋否,n=47是出現(xiàn)了int類(lèi)型的越界(Integer.MAX_VALUE is 2147483647)這里需要注意梨水,計(jì)算用時(shí)達(dá)到了恐怖的14秒多。斐波那契數(shù)列的值隨著增大進(jìn)行指數(shù)級(jí)的增長(zhǎng)茵臭,運(yùn)行事件也是指數(shù)級(jí)的增長(zhǎng)(n越大越能看出這一點(diǎn))疫诽。


斐波那契數(shù)列-遞歸方法調(diào)用過(guò)程

動(dòng)態(tài)規(guī)劃版本

正如魯迅先生的《狂人日記》中,孔乙己"回"字的四種寫(xiě)法。動(dòng)態(tài)規(guī)劃算法有兩種等價(jià)的實(shí)現(xiàn)方法奇徒。

  1. 帶備忘的自頂向下法(top-down with memoization)雏亚,此方法仍按自然的遞歸形式編寫(xiě)過(guò)程,但過(guò)程會(huì)保存每個(gè)子問(wèn)題的解(通常保存在一個(gè)數(shù)組或者散列表中)摩钙。當(dāng)需要一個(gè)子問(wèn)題的解時(shí)罢低,過(guò)程首先檢查是否已經(jīng)保存過(guò)此解。如果是胖笛,則直接返回保存的值奕短,從而節(jié)省了計(jì)算時(shí)間,否則匀钧,按通常的方式計(jì)算這個(gè)子問(wèn)題翎碑。我們稱(chēng)這個(gè)遞歸過(guò)程是帶備忘的(memoized),因?yàn)樗坝涀 绷酥坝?jì)算出的結(jié)果。
    以斐波那契數(shù)列的解法為例之斯,代碼如下:
    long[] memo=new long[memoSize];
    public long topdown(int n) {
        if(n<0) return -1;
        if(n<2) return n;
        if(memo[n]>0) {
            return memo[n];
        }else {
            return memo[n]=topdown(n-1)+topdown(n-2);
        }

通過(guò)控制臺(tái)驗(yàn)證下算法的計(jì)算結(jié)果和計(jì)算用時(shí)日杈。

fibonacci 0 is 0        計(jì)算用時(shí)        0ms
fibonacci 1 is 1        計(jì)算用時(shí)        0ms
fibonacci 2 is 1        計(jì)算用時(shí)        0ms
fibonacci 3 is 2        計(jì)算用時(shí)        1ms
fibonacci 4 is 3        計(jì)算用時(shí)        0ms
fibonacci 5 is 5        計(jì)算用時(shí)        0ms
fibonacci 6 is 8        計(jì)算用時(shí)        0ms
fibonacci 7 is 13       計(jì)算用時(shí)        0ms
fibonacci 8 is 21       計(jì)算用時(shí)        0ms
fibonacci 9 is 34       計(jì)算用時(shí)        0ms
fibonacci 10 is 55      計(jì)算用時(shí)        0ms
fibonacci 11 is 89      計(jì)算用時(shí)        0ms
fibonacci 12 is 144     計(jì)算用時(shí)        0ms
fibonacci 13 is 233     計(jì)算用時(shí)        0ms
fibonacci 14 is 377     計(jì)算用時(shí)        0ms
fibonacci 15 is 610     計(jì)算用時(shí)        0ms
fibonacci 16 is 987     計(jì)算用時(shí)        0ms
fibonacci 17 is 1597        計(jì)算用時(shí)        0ms
fibonacci 18 is 2584        計(jì)算用時(shí)        0ms
fibonacci 19 is 4181        計(jì)算用時(shí)        0ms
fibonacci 20 is 6765        計(jì)算用時(shí)        0ms
fibonacci 21 is 10946       計(jì)算用時(shí)        0ms
fibonacci 22 is 17711       計(jì)算用時(shí)        0ms
fibonacci 23 is 28657       計(jì)算用時(shí)        0ms
fibonacci 24 is 46368       計(jì)算用時(shí)        0ms
fibonacci 25 is 75025       計(jì)算用時(shí)        0ms
fibonacci 26 is 121393      計(jì)算用時(shí)        0ms
fibonacci 27 is 196418      計(jì)算用時(shí)        0ms
fibonacci 28 is 317811      計(jì)算用時(shí)        0ms
fibonacci 29 is 514229      計(jì)算用時(shí)        0ms
fibonacci 30 is 832040      計(jì)算用時(shí)        0ms
fibonacci 31 is 1346269     計(jì)算用時(shí)        0ms
fibonacci 32 is 2178309     計(jì)算用時(shí)        0ms
fibonacci 33 is 3524578     計(jì)算用時(shí)        0ms
fibonacci 34 is 5702887     計(jì)算用時(shí)        0ms
fibonacci 35 is 9227465     計(jì)算用時(shí)        0ms
fibonacci 36 is 14930352        計(jì)算用時(shí)        0ms
fibonacci 37 is 24157817        計(jì)算用時(shí)        0ms
fibonacci 38 is 39088169        計(jì)算用時(shí)        0ms
fibonacci 39 is 63245986        計(jì)算用時(shí)        0ms
fibonacci 40 is 102334155       計(jì)算用時(shí)        0ms
fibonacci 41 is 165580141       計(jì)算用時(shí)        0ms
fibonacci 42 is 267914296       計(jì)算用時(shí)        0ms
fibonacci 43 is 433494437       計(jì)算用時(shí)        0ms
fibonacci 44 is 701408733       計(jì)算用時(shí)        0ms
fibonacci 45 is 1134903170      計(jì)算用時(shí)        0ms
fibonacci 46 is 1836311903      計(jì)算用時(shí)        0ms
fibonacci 47 is 2971215073      計(jì)算用時(shí)        0ms

  1. 自底向上法(bottom-up method),這種方法一般需要恰當(dāng)定義子問(wèn)題的“規(guī)挠铀ⅲ”的概念莉擒,使得任何子問(wèn)題的求解只依賴(lài)“更小的”子問(wèn)題的求解。因而我們可以將子問(wèn)題按規(guī)模排序瘫絮,按由小到大的順序進(jìn)行求解涨冀。當(dāng)求解某個(gè)子問(wèn)題時(shí),它所依賴(lài)的那些更小的子問(wèn)題都已經(jīng)求解完畢麦萤,結(jié)果已經(jīng)保存鹿鳖。每個(gè)子問(wèn)題只需求解依次,當(dāng)我們求解它(也是第一次遇到它)時(shí)壮莹,它的所有前提子問(wèn)題都已求解完成翅帜。

動(dòng)態(tài)規(guī)劃的解法-自底向上法

    long[] memo=new long[memoSize];
    public long     bottomup(int n) {
        if(n<0) return -1;
        if(n<=1) return n;
        memo[0]=0;
        memo[1]=1;
        if(n>1) {
            for(int i=2;i<=n;i++) {
                memo[i]=memo[i-1]+memo[i-2];
            }
        }
        return memo[n];
    }

通過(guò)控制臺(tái)驗(yàn)證下算法的計(jì)算結(jié)果和計(jì)算用時(shí)。

fibonacci 0 is 0        計(jì)算用時(shí)        0ms
fibonacci 1 is 1        計(jì)算用時(shí)        0ms
fibonacci 2 is 1        計(jì)算用時(shí)        0ms
fibonacci 3 is 2        計(jì)算用時(shí)        0ms
fibonacci 4 is 3        計(jì)算用時(shí)        0ms
fibonacci 5 is 5        計(jì)算用時(shí)        0ms
fibonacci 6 is 8        計(jì)算用時(shí)        0ms
fibonacci 7 is 13       計(jì)算用時(shí)        0ms
fibonacci 8 is 21       計(jì)算用時(shí)        0ms
fibonacci 9 is 34       計(jì)算用時(shí)        0ms
fibonacci 10 is 55      計(jì)算用時(shí)        0ms
fibonacci 11 is 89      計(jì)算用時(shí)        0ms
fibonacci 12 is 144     計(jì)算用時(shí)        0ms
fibonacci 13 is 233     計(jì)算用時(shí)        0ms
fibonacci 14 is 377     計(jì)算用時(shí)        0ms
fibonacci 15 is 610     計(jì)算用時(shí)        0ms
fibonacci 16 is 987     計(jì)算用時(shí)        0ms
fibonacci 17 is 1597        計(jì)算用時(shí)        0ms
fibonacci 18 is 2584        計(jì)算用時(shí)        0ms
fibonacci 19 is 4181        計(jì)算用時(shí)        0ms
fibonacci 20 is 6765        計(jì)算用時(shí)        0ms
fibonacci 21 is 10946       計(jì)算用時(shí)        0ms
fibonacci 22 is 17711       計(jì)算用時(shí)        0ms
fibonacci 23 is 28657       計(jì)算用時(shí)        0ms
fibonacci 24 is 46368       計(jì)算用時(shí)        0ms
fibonacci 25 is 75025       計(jì)算用時(shí)        0ms
fibonacci 26 is 121393      計(jì)算用時(shí)        0ms
fibonacci 27 is 196418      計(jì)算用時(shí)        0ms
fibonacci 28 is 317811      計(jì)算用時(shí)        0ms
fibonacci 29 is 514229      計(jì)算用時(shí)        0ms
fibonacci 30 is 832040      計(jì)算用時(shí)        0ms
fibonacci 31 is 1346269     計(jì)算用時(shí)        0ms
fibonacci 32 is 2178309     計(jì)算用時(shí)        0ms
fibonacci 33 is 3524578     計(jì)算用時(shí)        0ms
fibonacci 34 is 5702887     計(jì)算用時(shí)        0ms
fibonacci 35 is 9227465     計(jì)算用時(shí)        0ms
fibonacci 36 is 14930352        計(jì)算用時(shí)        0ms
fibonacci 37 is 24157817        計(jì)算用時(shí)        0ms
fibonacci 38 is 39088169        計(jì)算用時(shí)        0ms
fibonacci 39 is 63245986        計(jì)算用時(shí)        0ms
fibonacci 40 is 102334155       計(jì)算用時(shí)        0ms
fibonacci 41 is 165580141       計(jì)算用時(shí)        0ms
fibonacci 42 is 267914296       計(jì)算用時(shí)        0ms
fibonacci 43 is 433494437       計(jì)算用時(shí)        0ms
fibonacci 44 is 701408733       計(jì)算用時(shí)        0ms
fibonacci 45 is 1134903170      計(jì)算用時(shí)        0ms
fibonacci 46 is 1836311903      計(jì)算用時(shí)        0ms
fibonacci 47 is 2971215073      計(jì)算用時(shí)        0ms

總結(jié)

同樣規(guī)模的斐波那契數(shù)列的計(jì)算問(wèn)題命满,動(dòng)態(tài)規(guī)劃版本的都能在很短的時(shí)間內(nèi)計(jì)算完畢涝滴,遞歸的解決方案,在小于50的情況下就出現(xiàn)了十幾秒的計(jì)算情況胶台,動(dòng)態(tài)規(guī)劃的運(yùn)行時(shí)間的提升很明顯歼疮。

動(dòng)態(tài)規(guī)劃解決走臺(tái)階問(wèn)題

有n級(jí)臺(tái)階,每次上一級(jí)或者兩級(jí)诈唬,問(wèn)有多少種走完n級(jí)臺(tái)階的方法韩脏。

分析:動(dòng)態(tài)規(guī)劃的實(shí)現(xiàn)的關(guān)鍵在于能不能準(zhǔn)確合理的用動(dòng)態(tài)規(guī)劃表來(lái)抽象出 實(shí)際問(wèn)題。在這個(gè)問(wèn)題上讯榕,我們讓f(n)表示走上n級(jí)臺(tái)階的方法數(shù)骤素。
那么當(dāng)n為1時(shí)匙睹,f(n) = 1,n為2時(shí)愚屁,f(n) =2,就是說(shuō)當(dāng)臺(tái)階只有一級(jí)的時(shí)候济竹,方法數(shù)是一種,臺(tái)階有兩級(jí)的時(shí)候霎槐,方法數(shù)為2送浊。那么當(dāng)我們要走上n級(jí)臺(tái)階,必然是從n-1級(jí)臺(tái)階邁一步或者是從n-2級(jí)臺(tái)階邁兩步丘跌,所以到達(dá)n級(jí)臺(tái)階的方法數(shù)必然是到達(dá)n-1級(jí)臺(tái)階的方法數(shù)加上到達(dá)n-2級(jí)臺(tái)階的方法數(shù)之和袭景。即f(n) = f(n-1)+f(n-2),我們用dp[n]來(lái)表示動(dòng)態(tài)規(guī)劃表闭树,dp[i],i>0,i<=n,表示到達(dá)i級(jí)臺(tái)階的方法數(shù)耸棒。

動(dòng)態(tài)規(guī)劃的解法-自底向上法

    long[] memo=new long[memoSize];
    public long stepBottomup(int n) {
        if(n<0) return 0;
        if(n==1) return 1;
        if(n==2) return 2;

        memo[0]=1;
        memo[1]=2;
        if(n>1) {
            for(int i=2;i<n;i++) {
                memo[i]=memo[i-1]+memo[i-2];
            }
        }
        return memo[n-1];

    }

通過(guò)控制臺(tái)驗(yàn)證下算法的計(jì)算結(jié)果和計(jì)算用時(shí)。

走臺(tái)階方案數(shù)      樓梯數(shù) 1    走法 is 1        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 2    走法 is 2        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 3    走法 is 3        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 4    走法 is 5        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 5    走法 is 8        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 6    走法 is 13       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 7    走法 is 21       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 8    走法 is 34       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 9    走法 is 55       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 10   走法 is 89       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 11   走法 is 144      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 12   走法 is 233      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 13   走法 is 377      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 14   走法 is 610      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 15   走法 is 987      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 16   走法 is 1597     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 17   走法 is 2584     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 18   走法 is 4181     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 19   走法 is 6765     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 20   走法 is 10946        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 21   走法 is 17711        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 22   走法 is 28657        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 23   走法 is 46368        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 24   走法 is 75025        計(jì)算用時(shí)        1ms
走臺(tái)階方案數(shù)      樓梯數(shù) 25   走法 is 121393       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 26   走法 is 196418       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 27   走法 is 317811       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 28   走法 is 514229       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 29   走法 is 832040       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 30   走法 is 1346269      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 31   走法 is 2178309      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 32   走法 is 3524578      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 33   走法 is 5702887      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 34   走法 is 9227465      計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 35   走法 is 14930352     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 36   走法 is 24157817     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 37   走法 is 39088169     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 38   走法 is 63245986     計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 39   走法 is 102334155        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 40   走法 is 165580141        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 41   走法 is 267914296        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 42   走法 is 433494437        計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 43   走法 is 701408733        計(jì)算用時(shí)        1ms
走臺(tái)階方案數(shù)      樓梯數(shù) 44   走法 is 1134903170       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 45   走法 is 1836311903       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 46   走法 is 2971215073       計(jì)算用時(shí)        0ms
走臺(tái)階方案數(shù)      樓梯數(shù) 47   走法 is 4807526976       計(jì)算用時(shí)        0ms

這里只給出其中的一種解法报辱,至于另一種解法与殃,大家嘗試的寫(xiě)下。

以上碍现,謝謝閱讀幅疼,希望你有所收獲!

算法導(dǎo)論公開(kāi)課筆記(一)算法分析與設(shè)計(jì)
算法導(dǎo)論公開(kāi)課筆記(二)快速排序和隨機(jī)化算法
算法導(dǎo)論公開(kāi)課筆記(三)線(xiàn)性時(shí)間排序
算法導(dǎo)論公開(kāi)課筆記(四)順序統(tǒng)計(jì)昼接、中值
動(dòng)態(tài)規(guī)劃算法

參考鏈接
動(dòng)態(tài)規(guī)劃算法經(jīng)典案例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爽篷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慢睡,更是在濱河造成了極大的恐慌逐工,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漂辐,死亡現(xiàn)場(chǎng)離奇詭異钻弄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)者吁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)窘俺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人复凳,你說(shuō)我怎么就攤上這事瘤泪。” “怎么了育八?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵对途,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我髓棋,道長(zhǎng)实檀,這世上最難降的妖魔是什么惶洲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮膳犹,結(jié)果婚禮上恬吕,老公的妹妹穿的比我還像新娘。我一直安慰自己须床,他們只是感情好铐料,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著豺旬,像睡著了一般钠惩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上族阅,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天篓跛,我揣著相機(jī)與錄音,去河邊找鬼坦刀。 笑死愧沟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的求泰。 我是一名探鬼主播央渣,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼渴频!你這毒婦竟也來(lái)了芽丹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卜朗,失蹤者是張志新(化名)和其女友劉穎拔第,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體场钉,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚊俺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逛万。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泳猬。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宇植,靈堂內(nèi)的尸體忽然破棺而出得封,到底是詐尸還是另有隱情,我是刑警寧澤指郁,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布忙上,位于F島的核電站,受9級(jí)特大地震影響闲坎,放射性物質(zhì)發(fā)生泄漏疫粥。R本人自食惡果不足惜茬斧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望梗逮。 院中可真熱鬧项秉,春花似錦、人聲如沸库糠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瞬欧。三九已至,卻和暖如春罢防,著一層夾襖步出監(jiān)牢的瞬間艘虎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工咒吐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留野建,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓恬叹,卻偏偏與公主長(zhǎng)得像候生,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绽昼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 原文: 常用的算法設(shè)計(jì)思想主要有動(dòng)態(tài)規(guī)劃唯鸭、貪婪法、隨機(jī)化算法硅确、回溯法等等目溉,這些思想有重疊的部分,當(dāng)面對(duì)一個(gè)問(wèn)題的時(shí)...
    josephok閱讀 1,131評(píng)論 0 3
  • 動(dòng)態(tài)規(guī)劃學(xué)習(xí)-無(wú)資料 理論解釋http://www.cnblogs.com/steven_oyj/archive/...
    RavenX閱讀 1,022評(píng)論 0 2
  • 基本概念 動(dòng)態(tài)規(guī)劃過(guò)程是:每次決策依賴(lài)于當(dāng)前狀態(tài)菱农,又隨即引起狀態(tài)的轉(zhuǎn)移缭付。一個(gè)決策序列就是在變化的狀態(tài)中產(chǎn)生出來(lái)的,...
    羽恒閱讀 316評(píng)論 0 1
  • 動(dòng)態(tài)規(guī)劃 動(dòng)態(tài)規(guī)劃算法循未, Dynamic Programming簡(jiǎn)稱(chēng)DP陷猫,通常基于一個(gè)遞推公式及一個(gè)或多個(gè)初始狀態(tài)...
    御風(fēng)逍遙閱讀 5,285評(píng)論 0 7
  • 對(duì)沒(méi)錯(cuò)的妖,今天我又分手了绣檬。每次分手都是一樣,因?yàn)樾∈鲁车貌豢砷_(kāi)交直至分手羔味。真的挺累的河咽,但我沒(méi)想到她不覺(jué)得我好過(guò),這可...
    Lademon閱讀 185評(píng)論 0 0