題目跟卡特蘭數有關
卡特蘭數是乙個數列,第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...