1. 程式人生 > >卡特蘭數 列車出棧方案總數

卡特蘭數 列車出棧方案總數

出棧次序一個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?[5-6]常規分析首先,我們設f(n)=序列個數為n的出棧序列種數。(我們假定,最後出棧的元素為k,顯然,k取不同值時的情況是相互獨立的,也就是求出每種k最後出棧的情況數後可用加法原則,由於k最後出棧,因此,在k入棧之前,比k小的值均出棧,此處情況有f(k-1)種,而之後比k大的值入棧,且都在k之前出棧,因此有f(n-k)種方式,由於比k小和比k大的值入棧出棧情況是相互獨立的,此處可用乘法原則,f(n-k)*f(k-1)種,求和便是Catalan遞迴式。ps.author.陶百百)首次出空之前第一個出棧的序數k將1~n的序列分成兩個序列,其中一個是1~k-1,序列個數為k-1,另外一個是k+1~n,序列個數是n-k。此時,我們若把k視為確定一個序數,那麼根據
乘法原理
,f(n)的問題就等價於——序列個數為k-1的出棧序列種數乘以序列個數為n - k的出棧序列種數,即選擇k這個序數的f(n)=f(k-1)×f(n-k)。而k可以選1到n,所以再根據加法原理,將k取不同值的序列種數相加,得到的總序列種數為:f(n)=f(0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0)。JAVA大數親切,本弱渣就不寫了。。
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static void main(String[] args)
    {
        int n,i,j;
        Scanner cin=new Scanner(System.in);
        BigInteger []a=new BigInteger[105];
        for (i=0;i<=100;i++) a[i]=BigInteger.valueOf(0);
        a[0]=BigInteger.valueOf(1);
        a[1]=BigInteger.valueOf(1);
        for(i=2;i<=100;i++)
            for(j=0;j<=i-1;j++)
                a[i]=a[i].add(a[j].multiply(a[i-j-1]));
        while (cin.hasNext())
        {
            n=cin.nextInt();
            System.out.println(a[n]);
        }
    }
}


相關推薦

列車方案總數

出棧次序一個棧(無窮大)的進棧序列為1,2,3,…,n,有多少個不同的出棧序列?[5-6]常規分析首先,我們設f(n)=序列個數為n的出棧序列種數。(我們假定,最後出棧的元素為k,顯然,k取不同值時的情況是相互獨立的,也就是求出每種k最後出棧的情況數後可用加法原則,由於k最後

簡單分析原理 為什麼可以求解情況 史上最簡單

首先簡單看一下公式 公式就是若要求一個數,就把之前求出來的數,第一個乘以最後一個。 為什麼可以這樣就可以求出出棧情況數呢? 我們用遞迴的思想來看待。 這裡我們作一個假設。我們會把n個數分成兩部分來處理。就是必須等第一部分處理(棧內全部排空)完後,第二部分的數才能入棧,才

n個數的方式(

問題 給定n個數,有多少種出棧序列,進棧是按照順序進棧? 分析:當n為1時: f(1) = 1 //即 1 當n為2時: f(2) = 2;//12, 21 當n為3

n個元素進,輸出所有序列--遞迴

#include <iostream> #include <stack> #include <queue> #include <algorithm> #include <string.h> #include <

--佇列(解法收集和總結)

解法1: 可以把這個問題描述為一個二元組表示進棧出棧的狀態,(n, 0) 表示有n個元素等待進棧, 0 個元素已進棧,這相當於問題最初的狀況. 接著問題轉化為(n-1,1). 可以這麼說(n,0) = (n-1,1). 而對於(n-1,1)則相當於(n-1,0)+(n-

次序問題——

令h(0)=1,h(1)=1,catalan數滿足遞推式[1]: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2) 例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2 h(3)=h(0)*h(2)+h(

資料結構_任意N個元素有多少種順序(證明)

1.飯後,姐姐洗碗,妹妹把姐姐洗過的碗一個一個地放進碗櫥摞成一摞。一共有n個不同的碗,洗前也是摞成一摞的,也許因為小妹貪玩而使碗拿進碗櫥不及時,姐姐則把洗過的碗摞在旁邊,問:小妹摞起的碗有多少種可能的方式? 2.給定n個數,有多少種出棧序列? 3.一個有n個1和n個-1組成的字串,且前k個數的和均不小

---n 個元素順序入,則可能的序列有多少種

題目:N個數依次入棧,出棧順序有多少種? 首先介紹一下卡特蘭數:卡特蘭數前幾項為 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35

應用--n個元素的順序與從(0,0)到(n,n)不穿過對角線的方法

1.出棧順序方法數: hdoj1023 求出棧序列,比如1,2,3,出棧序列為3 2 1,1 2 3,1 3 2,2 1 3,2 3 1,一共5種 第一種思路: 我們把入棧看做1,出棧看做0,那麼入棧

P1044 洛谷(數論)()

卡特蘭數 今天 name 出現問題 vector algo main cin n+1 卡特蘭數遞推公式之一(今天剛知道這東西…): f[n] = f[n-1] * (4 * n – 2) /(n + 1) (Ps:聽說在一些數據苛刻的題目中此公式會出現問題?不過對於這道題目

| (Catalan number)

文章目錄 1.棧與卡特蘭數的關係 2.卡特蘭數 3.擴充套件 4.相關題目 1.棧與卡特蘭數的關係 棧是計算機中經典的資料結構,我們也會遇到一個常見的問題:一共有多少種合法的出棧順序? 先說一下什麼是合法的出棧序列, 凡是

洛谷P1044 :

https://www.luogu.org/problemnew/show/P1044 題目背景 棧是計算機中經典的資料結構,簡單的說,棧就是限制在一端進行插入刪除操作的線性表。 棧有兩種最重要的操作,即pop(從棧頂彈出一個元素)和push(將一個元素進棧)。 棧的重要性不言自

JoyOI火車進出問題(水水版+普通版+強化版) 高精度壓位+篩素數+統計約數+快速冪=

題目 一列火車n節車廂,依次編號為1,2,3,…,n。每節車廂有兩種運動方式,進棧與出棧,問n節車廂出棧的可能排列方式有多少種。 水水版:n<=100 普通版:n<=30000 加強版:n<=50000 題解 CatalanCata

(Catalan number)

1.棧與卡特蘭數的關係 棧是計算機中經典的資料結構,我們也會遇到一個常見的問題:一共有多少種合法的出棧順序? 先說一下什麼是合法的出棧序列, 凡是合法序列都遵循以下規律:即對於出棧序列中的每一個數字,在它後面的、比它小的所有數字,一定是按遞減順序排列的。 例如

,程式實現,遞迴,迴圈,BST和出入順序的應用

 卡特蘭數是組合數學中的一種數列,它的來歷和重要性可以自行百度,我主要說它的特徵和程式設計實現。 前幾項是1, 1, 2, 5, 14, 42, 132……, 如果令h(0)=h(1)=1,那麼h(n)=h(0)*h(n-1)+h(1)*h(n-2) + .

(轉載)Catalan——

出現 註意 城市 ads 大於 編號 只有一個 導致 一個點 Catalan數——卡特蘭數 今天阿裏淘寶筆試中碰到兩道組合數學題,感覺非常親切,但是筆試中失蹤推導不出來後來查了下,原來是Catalan數。悲劇啊,現在整理一下一、Catalan數的定義令h(1)=1,Cata

ini bits clas cnblogs 操作 div esp class 序列 卡特蘭數是組合數學 常見的數列 主要有4中形式: 1: h(n)= C 2n n /(n+1) 2: h(n)= C 2n n - C 2n n-1 3: h(n)= h(n

HDU 1133 Buy the Ticket

i++ ava () pos str mat bre == ann 設50元的人為+1 100元的人為-1 滿足前隨意k個人的和大於等於0 卡特蘭數 C(n+m, m)-C(n+m, m+1)*n!*m! import java.math.*; import java

HDU 1134 Game of Connections(

cut res ras sam eof cpp ont des tel 題目代號:HDU 1134 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1134 Game of Connections Time Limit: 200

bzoj2822[AHOI2012]樹屋階梯()

n+1 amp nbsp put mat pan cat limit 一個 2822: [AHOI2012]樹屋階梯 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 879 Solved: 513[Submit][Sta