走台階問題

2021-06-26 00:20:17 字數 1827 閱讀 5746

舉個例子,假設有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,...