每日一題 過橋問題

2021-08-25 13:14:55 字數 742 閱讀 5625

問題描述:

今天偶然在《讀者》上看到了益智問題 ,試著解了一下,感覺還是很有意思,google了一下,晚上都說是微軟面試題,但是我找了找,在《how to slove it》這本書中就有提到。不知道是誰cp的誰的。好吧,說說問題:u2合唱團在17分鐘內得趕到演唱會,途中必須經過一座橋,4個人從橋的同一端出發,你得幫助他們到達另外的一段,天色已經暗下來,但是他們手中僅有乙個手電筒,自此最多只能有兩個人過橋,而過橋的時候必須持有手電筒,所以就得有人把手電筒帶來帶去。手電筒是不能通過丟的方式來傳遞的,4個人的步行速度是各不相同的,兩個人的過橋時間需要以比較慢的那個人為準。四個人a,b,c,d所需的時間分別是1 2 5 10分鐘。那麼怎樣在177分鐘之內過橋?

思路:

開始的思路是使用「貪心」的策略。每次在橋的一邊選擇兩個所需時間最短的兩個人過橋,在橋的對面每次選擇乙個過橋時間最短的人來送回手電筒,但是這樣得到的時間確實19分鐘。ok,現在想想在上面的「貪心」的思路中,那裡耗費了比較長的時間。顯然,在最後一步a和d一起過橋,這裡用時10分鐘,但是a和d的速度相差太大,那如果讓c和d一起過橋,會不會把總的過橋時間降下來。按照這個思路得到如下的解:

1和2首先過橋,用時2分鐘,談後1送過來手電筒,用時1分鐘,然後5和10過橋,用時10分鐘,然後2送過來手電筒,用時2分鐘,然後1和2一起過橋,用時2分鐘,總計用時2+1+10+2+2=17分鐘。

繼續往下,這個問題是否能夠轉換成某種模型去解決。ok,思路是這樣的:構造這樣乙個圖g,g中的每個節點表示已經過了橋的人的集合。g中的邊表示的是

每日一題 獎金問題

一 問題描述 二 問題分析 涉及資料 利潤profit,獎金bonus 資料間的關係 當profit 10w,bonus profit 0.1 當profit 20w,bonus 100000 0.1 profit 100000 0.075 三 由使用者輸入乙個利潤,並將輸入轉換為整數型方便進行比較...

每日一題 種花問題

假設你有乙個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花卉不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。給定乙個花壇 表示為乙個陣列包含0和1,其中0表示沒種植花,1表示種植了花 和乙個數 n 能否在不打破種植規則的情況下種入 n 朵花?能則返回true,不能則返回false。我...

每日一題 最小棧問題

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.push 2 m...