7 4 mmh學長與出棧 20分

2021-10-02 19:58:16 字數 909 閱讀 8643

題目跟卡特蘭數有關

卡特蘭數是乙個數列,第n個卡特蘭數代表,對於n個0和n個1組成的數列,存在(c(2n,n)- c(2n,n-1)+mod)%mod種方案使得該數列任意字首中,0的數量都不小於1的數量

組合數的計算公式:

for(int i = 0; i <= n; i++)

c[i][0] = c[i][i] = 1;

for(int i = 2; i <= n; i++)

for(int j = 1; j <= i/2; j++)

c[i][j] = (c[i-1][j]+c[i-1][j-1])%mod;//楊輝三角 c(n,m) = c(n,m-1) + c(n,m);

7-4 mmh學長與出棧 (20分)

mmh學長與出棧

某天,小白詢問了mmh學長乙個問題,有乙個數列1,2,……,n, 如果按照1,2,……,n的順序入棧,那麼有多少種不同的出棧順序。

一行乙個正整數n(n≤2000),表示數列1,2,……,n

乙個整數sum,表示有多少種不同的出棧順序, 由於該數可能較大,你只需輸出其對1e9+7取模後的餘數即可。

2
2
#include#include#includeusing namespace std;

#define maxn 4015

typedef long long ll;

int n;

ll c[maxn][maxn];

ll mod = 1000000007;

int main()

}cin>>n;

cout<<(c[2*n][n] - c[2*n][n-1]+mod)%mod

}

進棧與出棧

問題描述 有四個元素abcd依次入初始為空的棧中,入棧之後可停留,可出棧。最後所有元素都出棧,請分析並寫出所有可能的分別以a,b,c,d開頭的出棧序列。首先分析以a開頭的出棧序列。序列前兩位無非3種 ab,ac,ad。再分別分析這三種開頭的序列分別對應著幾種可能序列。ab顯然有abcd和abdc兩種...

棧的出棧語與入棧

初始定義為 define empty 1 棧空標識 define succ 1 成功標識 define fail 0 失敗標識 const int m 1000 棧空間大小 typedef int element type 資料型別進棧函式push int push element type s,i...

關於佇列與棧的出棧順序

1.佇列 先進先出 fifo 引入昨天寫的jar包,用簡單的程式實現對佇列先進先出概念的模擬 2.棧 先進後出 filo 用簡單的程式實現對棧先進後出概念的模擬public class queue public void add object data 先進先出,每次拿走並刪除第乙個資料 publi...