1. 程式人生 > 其它 >第一節python自動化運維入門

第一節python自動化運維入門

“我經常有那種感覺,如果這個事情來了,你卻沒有勇敢地去解決掉,它一定會再來。生活真是這樣,它會一次次地讓你去做這個功課直到你學會為止。” —— 《像我這樣笨拙地生活》

卡特蘭數(Catalan number)是組合數學中一個常出現在各種計數問題中的數列。

​數列的前幾項為:1,1, 2, 5, 14, 42, 132, 429, 1430, 4862,...

題目描述:

n 個元素進棧序列為:1,2,3,4,...,n,則有多少種出棧序列。

思路:

我們將進棧表示為 +1,出棧表示為 -1,則 1 3 2 的出棧序列可以表示為:+1 -1 +1 +1 -1 -1。

假設非法序列為 A,對應的序列為 B。每個 A 只有一個"第一個字首和小於 0 的字首",所以每個 A 只能產生一個 B。而每個 B 想要還原到 A,就需要找到"第一個字首和大於 0 的字首",顯然 B 也只能產生一個 A。

#include <cstdio>
using namespace std;
long long catalan[1000005];
int main()
{
    int n;
    scanf("%d", &n);
    catalan[0] = catalan[1] = 1;
    for (int i = 2; i <= n; i++)
        for (int j = 0; j <= i - 1; j++)
            catalan[i] += catalan[j] * catalan[i - j - 1];
    printf("%lld\n", catalan[n]);
    return 0;
}

  我有罪,從此與省二失之交臂。這一次就是在賽場上沒認出來。關於括號的排列組合,在使勁想轉移方程,卡了3h。