組合數學 小兔的棋盤(卡特蘭數)

2021-10-09 22:40:51 字數 1074 閱讀 1528

題目鏈結

小兔的叔叔從外面旅遊回來給她帶來了乙個禮物,小兔高興地跑回自己的房間,拆開一看是乙個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點(0,0)走到終點(n,n)的最短路徑數是c(2n,n),現在小兔又想如果不穿越對角線(但可接觸對角線上的格點),這樣的路徑數有多少?小兔想了很長時間都沒想出來,現在想請你幫助小兔解決這個問題,對於你來說應該不難吧!

每次輸入乙個數n(1<=n<=35),當n等於-1時結束輸入。

對於每個輸入資料輸出路徑數,具體格式看sample。13

12-1

1 1 2

2 3 10

3 12 416024

卡特蘭數的遞推式:

#include

#include

#include

#include

#include

using

namespace std;

intmain()

; f[0]

=1,f[1]=

1;for(

int i=

2;i<=

35;i++)}

int cnt=

1,n;

while

(cin>>n)

printf

("%d %d %i64d\n"

,cnt++

,n,f[n]*2

);}return0;

}

通過題意可以得到遞推公式:

dp[i][i] = dp[i-1][j] (i=j)

dp[i][j] = dp[i-1][j] + dp[i][j-1] (i!=j)

#include

#include

#include

#include

#include

using

namespace std;

intmain()

else}}

while

(cin>>n&&n!=-1

)return0;

}

組合數學 卡特蘭數

我們以一道題為例來介紹卡特蘭數 給定n n 個0 0 和n n個1 1,它們將按照某種順序排成長度為2 n 2n的序列,求它們能排列成的所有序列中,能夠滿足任意字首序列中0 0的個數都不少於1 1的個數的序列有多少個。輸出的答案對109 7 109 7取模。109 7 為了便於解決,我們可以把這個問...

組合數學 卡特蘭數總結

卡特蘭數 問題 n對括號有多少種合法的匹配方式?卡特蘭數的常見應用之一 結論 對於n對括號,合法的排列共有c n,2n c n 1,2n 基本思路 考慮n對括號,有n個 和n個 對於任意乙個 其前面必定有乙個 跟他對應,如果沒有則是非法序列。也就是說,對於 其前面的 的數量必須大於等於 的數量。假設...

神奇的組合數學 卡特蘭數

定義 令h 0 1 h 1 1 catalan數滿足遞推式。h n h 0 h n 1 h 1 h n 2 h n 1 h 0 n 2 通項公式 證明如下 摘自taocp的原練習題 數競黨很少用不嚴格證明的定理 1.括號對 合法的括號對對數答案為h n 2.二叉樹 合法的樹有答案為h n 3.分多邊...