舉個例子,假設有3個台階,則有三種走法:分別是,1-1-1, 1-2, 2-1。
很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f(k)種走法。
於是有如下公式
上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n=4時,五種走法分別如下:
1,1,1,1
1,1,2
1,2,1
2,1,1
2,2我們用乙個整型陣列來存放每一步的內容,1表示這步走了乙個台階,2表示這步走了兩個台階。回溯法搞定。**如下。
void與此題類似的問題有很多,比如鋪地磚問題,自然數拆分等。count(
intn,
intt)
}}
有乙個長度為n,寬度為2的地面,有若干塊長為2,寬為1的地磚,請問用此地磚鋪完這個地面共有多少種方法?
分析一下,假設鋪完長度為n的地面有f(n)種方法,如果第一塊地磚豎起來鋪,還剩下長度為n-1的地面,有f(n-1)種方法。如下圖。
如果第一塊地轉橫著鋪,那麼還剩下長度為n-2的地面,有f(n-2)種鋪法。如下圖。
所以這道題與上面的題解法完全一樣。不同的題目,相同的模型而已。
給定乙個自然數n,將其拆分為若干個自然數字之和,請問有多少種方法?舉個例子,n=4時,可以拆分為1-1-1-1,1-1-2,1-3,2-2。
這題和上面的題很像,不過上面的問題是排列問題,而這題是組合問題,比如n=4時,1-1-2,1-2-1,2-1-1這三種只能算乙個拆分。在上面的基礎上,去掉重複的組合即可。
這個是在的博問裡面看到的
1、現有
1000
個蘋果,
10個盒子,現在要你將1000個蘋果裝入10個盒子中,使得使用者無論購買多少個蘋果(1-1000),都能由若干個盒子拼裝而成
(賣的時候是整個盒子賣,不能拆盒子的包裝)
解法:考慮1, 2, 4, 8這四個數,由這四個數可以組成1-15之間任意乙個數,也即1,2, 4 ... 2
n可以組成1-2(n+1)-1之間所有的數。所以這十個盒子分別放入
1, 2, 4, 8, 16, 32, 64, 128, 256, 489個蘋果,即可組成1-1000內所有的數。
2. 有1000瓶液體,無色無味,外表完全一樣,其中一瓶是毒藥,有10條警犬,警犬喝過毒藥後兩小時後死亡。問,如何在兩個小時後確定哪瓶是毒藥。
也是二進位制方法,1000瓶毒藥編號0-999,10條警犬編號0-9,現在看每瓶液體編號的二進位制表示,假設第i(從0開始)位是1,那麼讓第i條狗喝這瓶液體。比如第0瓶液體,沒有警犬喝,第5瓶液體分別由第0條和第2條警犬喝,將1000液體全部分配給警犬喝下。待兩個小時後,檢視所有死亡的警犬,將它們的編號組成二進位制數,那麼這個二進位制數對應的十進位制數即是液體的編號。
走台階問題
舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n 4時,五種走法分別如下 1,1,1,1 1,...
走台階問題
舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 遞迴演算法int count unsigned intn 非遞迴演算法int count unsigned i...
走台階問題
舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n 4時,五種走法分別如下 1,1,1,1 1,...