標準二維表問題

2021-09-01 06:15:20 字數 1319 閱讀 3352

問題描述:

設n是乙個正整數,2*n的二維表是由正整數1,2,…,2n組成的2*n陣列,該陣列的每行從左到右遞增,每列從上到下遞增。這樣的陣列為標準二維表。

輸入乙個整數n(0

輸入n輸出乙個整數

樣例輸入

3

樣例輸出

5

遞迴的**:

利用遞迴時,我們基於入棧和出棧的思想來解決問題:

(1)如果元素出現在第乙個位置,則必定是:元素1先入棧、出棧;然後再對其他n-1個元素進行入棧和出棧,如果用h(n)來表示對n個數進行出棧和入棧的次數,則此種情況對應的排列數為h(n-1)。

(2)如果1出現在第二個位置,則此時的狀態必然是:元素1和2入棧,元素2出棧,元素1出棧,後面的n-2個元素出入棧。此時的排列數為h(1)h(n-2),此時h(1)代表對元素2出棧和入棧的情況;

(3)如果1出現在第3個位置,則必然是先將1入棧,再後將2、3入棧,再將2、3出棧;然後再將1出棧,最後將其他的n-3個元素進行出棧和入棧。此時的排列數為h(2)h(n-3),其中h(2)代表對2和3兩個元素進行入棧和出棧的情況。

......

(4)如果1出現在最後的位置,則必然是1入棧,再後將後面的n-1個數入棧和出棧,最後將1出棧。此時的排列數為h(n-1)。

基於加法原則,對n個元素進行出棧和入棧的排列情況數為:

h(n)=h(n-1)+h(1)h(n-2)+...+h(n-1)

如果規定h(0)=1,則第一種情況h(n-1)可以寫為h(0)h(n-1)。因此如果假設完成n次出棧和入棧的次數為h(n),則有

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)

其中初始條件為h(0)=1。

還要考慮輸出結果不要整形溢位,所以:下面的**

#includelong long numst[10000];

void per()

if(sum0!=sum1)

return 0;

return 1;}

int main()

if(judge(table,2*n))

}printf("%d\n",count);

return 0;

}

標準二維表問題

問題描述 設n 是乙個正整數。2xn的標準2維表是由正整數1,2,2n 組成的2xn 陣列,該陣列的每行從左到右遞增,每列從上到下遞增。2xn的標準2維表全體記為tab n 例如,當n 3時tab 3 如下 思路分析 首先明確一下每行的數總是左邊小於後面,上面小於下面,以上面的第一種情況進行分析,我...

標準二維表問題 窮舉

問題描述 設n 是乙個正整數。2xn的標準2維表是由正整數1,2,2n 組成的2xn 陣列,該陣列的每行從左到右遞增,每列從上到下遞增。2xn的標準2維表全體記為tab n 例如,當n 3時tab 3 如下 演算法如下 include define max 100 using namespace s...

標準2 維表問題

標準2 維表問題 問題描述 n 是乙個正整數。2n 的標準2 維表是由正整數 1,2 2n 組成的2n 陣列,該 陣列的每行從左到右遞增,每列從上到下遞增。2n 的標準2 維表全體記為tab n 例如,當n 3 時tab 3 如下 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 4 5 ...