關鍵是要理解下文所說的,要求,0的累加個數大於1的累加個數.他們是一一對應的關係,從左到右掃瞄對應。
來自部落格:
問題描述:
12個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?
這個筆試題,很yd,因為把某個遞迴關係隱藏得很深.
問題轉換為,這樣的滿足條件的01序列有多少個.
觀察1的出現,我們考慮這乙個出現能不能放在第二排,顯然,在這個1之前出現的那些0,1對應的人
要麼是在這個1左邊,要麼是在這個1前面.而肯定要有乙個0的,在這個1前面,統計在這個1之前的0和1的個數.
也就是要求,0的個數大於1的個數.
對於每個1,1前面的0的個數,要大於1的個數,關係才成立。因為,對應的後面的數要比前面的數大,0比1多,可以滿足出現乙個1,就去對應他前面的0,這樣肯定是後面的數比前面的數大了。
在《計算機程式設計藝術》,第三版,donald e.knuth著,蘇運霖譯,第一卷,508頁,給出了證明:
問題大意是用s表示入棧,x表示出棧,那麼合法的序列有多少個(s的個數為n)
顯然有c(2n, n)個含s,x各n個的序列,剩下的是計算不允許的序列數(它包含正確個數的s和x,但是違背其它條件).
部落格:問題等價於:n個1和n個0組成一2n位的2進製數,要求從左到右掃瞄,1的累計數不小於0的累計數,試求滿足這條件的數有多少?
解答: 設p2n為這樣所得的數的個數。在2n位上填入n個1的方案數為 c(n 2n)
不填1的其餘n位自動填以數0。從c(n 2n)中減去不符合要求的方案數即為所求。
不合要求的數指的是從左而右掃瞄,出現0的累計數超過1的累計數的數。
不合要求的數的特徵是從左而右掃瞄時,必然在某一奇數2m+1位上首先出現m+1個0的累計數,和m個1的累計數。
此 後的2(n-m)-1位上有n-m個1,n-m-1個0。如若把後面這部分2(n-m)-1位,0與1交換,使之成為n-m個0,n-m-1個1,結果得 1個由n+1個0和n-1個1組成的2n位數,即乙個不合要求的數對應於乙個由n-1個1和n+1個0組成的乙個排列。
反過來,任何乙個 由n+1個0,n-1個1組成的2n位數,由於0的個數多2個,2n是偶數,故必在某乙個奇數字上出現0的累計數超過1的累計數。同樣在後面的部分,令0 和1互換,使之成為由n個0和n個1組成的2n位數。即n+1個0和n-1個1組成的2n位數,必對應於乙個不合要求的數。
用上述方法建立了由n+1個0和n-1個1組成的2n位數,與由n個0和n個1組成的2n位數中從左向右掃瞄出現0的累計數超過1的累計數的數一一對應。
不合要求的2n位數與n+1個0,n-1個1組成的排列一一對應
因此,序列的個數是c(2n, n-1),因此an = c(2n, n) - c(2n, n-1)
leetcode上題目的解法:
print('此處分割線————————————————————————————————————————』)
2.2漢諾塔問題
見知乎
參考部落格
解析:在f和s之間迴圈,當i==j時,退出迴圈。
買票找零問題
問題描述 一場激烈足球賽即將開始,售票員緊張地賣票著 每張球票50元,現在有2n 1 n 18 個球迷排隊購票,其中n個手持50元鈔票,另外n個手持100元鈔票。假設開始售票時售票處沒有零錢可以找零。問這2n個人有多少種排隊方式,不至使售票處出現找不出零的局面?例如當n 3時,共6人,3人持50元,...
4 3 買票找零問題
answer res c n c fracc n 先介紹卡特蘭數 給出乙個n,要求乙個長度為2n的0,1序列,使得序列的任意字首中1的個數不少於0的個數 證明 考慮乙個含有n個1,n個0的2n位二進位制數字,掃瞄到第2m 1位上的時候有m 1個0和m個1,則後面0,1 的個數分別為 有n m個1和n...
鏈家筆試演算法題
1 給定乙個陣列,將奇數排在偶數前面 思路 類似於快排的思想 include include include using namespace std void exchange int a,int n 2 刪除有序鍊錶中的重複元素 如下 include include include using n...