python 未名湖邊的煩惱

2021-10-25 06:18:02 字數 1592 閱讀 7400

問題描述:

每年冬天,北大未名湖上都是滑冰的好地方。北大體育組準備了許多冰鞋,可是人太多了,每天下午收工後,常常一雙冰鞋都不剩。

每天早上,租鞋視窗都會排起長龍,假設有還鞋的m個,有需要租鞋的n個。現在的問題是,這些人有多少種排法,可以避免出現體育組沒有冰鞋可租的尷尬場面。(兩個同樣需求的人(比如都是租鞋或都是還鞋)交換位置是同一種排法)

輸入格式:

兩個整數,表示m和n

輸出格式:

乙個整數,表示隊伍的排法的方案數。

樣例輸入:

3 2

樣例輸出:

資料規模和約定:

m,n∈[0,18]

## 問題分析 m人還鞋,n人租鞋

(1)當m < n 的時候,不管怎麼排都會出現 有人借不到鞋的尷尬場面,所以這時候方案數為 0

(2)當n = 0 的時候由於題目不需要區分同樣需求的人交換位序的情況,所以只有一種方案,這時候方案為1

(3)當m > n 的時候,每一種可行方案肯定是以還鞋的人在第乙個開頭(如果以租鞋開頭一定會出現借不到鞋,因為本來租鞋視窗沒有鞋),以還鞋或者是租鞋結尾(廢話,一共有兩種情況)

這樣我們可以把每一種方案分為兩類:最後為還鞋最後為租鞋

這樣我們就確定了每一種最後一位同學是還鞋還是租鞋,就不需要考慮最後一位是租鞋還是還鞋了。

同理利用遞迴也可以確定倒數第二位是租鞋或者還鞋的方案數

例:m=5 n=3 (一共8個同學)

總方案數 = 最後是還鞋的方案數 + 最後是租鞋的方案數

最後一位是還鞋 這時候 m = 4 n = 3 (這時候就不用考慮最後一位同學,因為他一定是還鞋,只需要討論前七位同學是租鞋還是還鞋)

最後一位是租鞋 這時候 m = 5 n = 2 (確定最後一位是租鞋,只需要討論前七位同學)

然後遞迴……………………

## **如下:

m,n =

map(

int,

input()

.split()

) #輸入

def fun

(m, n)

: #遞迴

if m < n:

return

0if n ==0:

return

1return

fun(m-

1, n)

+fun

(m, n-1)

#fun(m-1,n)是確定最後一位為還鞋的方案數

#fun(m,n-1)是確定最後一位為租鞋的方案數

print

(fun

(m, n)

) #輸出

在網上搜尋發現這個題沒有很詳細的解釋,想了一種比較容易明白的解釋

未名湖邊的煩惱

問題描述 每年冬天,北大未名湖上都是滑冰的好地方。北大體育組準備了許多冰鞋,可是人太多了,每天下午收工後,常常一雙冰鞋都不剩。每天早上,租鞋視窗都會排起長龍,假設有還鞋的m個,有需要租鞋的n個。現在的問題是,這些人有多少種排法,可以避免出現體育組沒有冰鞋可租的尷尬場面。兩個同樣需求的人 比如都是租鞋...

未名湖邊的煩惱

問題描述 每年冬天,北大未名湖上都是滑冰的好地方。北大體育組準備了許多冰鞋,可是人太多了,每天下午收工後,常常一雙冰鞋都不剩。每天早上,租鞋視窗都會排起長龍,假設有還鞋的m個,有需要租鞋的n個。現在的問題是,這些人有多少種排法,可以避免出現體育組沒有冰鞋可租的尷尬場面。兩個同樣需求的人 比如都是租鞋...

未名湖邊的煩惱

問題描述 每年冬天,北大未名湖上都是滑冰的好地方。北大體育組準備了許多冰鞋,可是人太多了,每天下午收工後,常常一雙冰鞋都不剩。每天早上,租鞋視窗都會排起長龍,假設有還鞋的m個,有需要租鞋的n個。現在的問題是,這些人有多少種排法,可以避免出現體育組沒有冰鞋可租的尷尬場面。兩個同樣需求的人 比如都是租鞋...