演算法之 過河 過橋問題

2021-07-15 12:46:47 字數 1525 閱讀 2758

一.過橋問題

在漆黑的夜裡,四位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時通過。如果各自單獨過橋的話,四人所需要的時間分別是1,2,5,8分鐘;而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨行動時所需的時間。問題是,你如何設計乙個方案,讓用的時間最少。

解答其實也容易,能者多勞這四個字就足以形容解答方案了——用時短的人必須要多跑幾趟以便傳遞手電筒。

設這四個人叫做a,b,c,d,他們所需要的時間分別是1,2,5,8分鐘。

第一步:a和b過橋,花費2分鐘。

第二步:a回來,花費1分鐘。

第三步:c和d過橋,花費8分鐘。

第四步:b回來,花費2分鐘。

第五步:a和b過橋,花費2分鐘。

這樣只要花費2+1+8+2+2=15分鐘,下面再來考慮如何用程式來解決這類問題,在寫程式之前還有個細節要考慮下,比如a,b,c,d四個人所需要的時間分別是1,8,9,10分鐘。

方案一第一步:a和b過橋,花費8分鐘。

第二步:a回來,花費1分鐘。

第三步:c和d過橋,花費10分鐘。

第四步:b回來,花費8分鐘。

第五步:a和b過橋,花費8分鐘。

一共要8+1+10+8+8=35分鐘。

方案二第一步:a和b過橋,花費8分鐘。

第二步:a回來,花費1分鐘。

第三步:a和c過橋,花費9分鐘。

第四步:a回來,花費1分鐘。

第五步:a和d過橋,花費10分鐘。

一共要8+1+9+1+10=29分鐘。

因此可以得出更加細化的解決方案——要麼是最快者將最慢的

2個送過橋,要麼是最快的

2個將最慢的

2個送過橋。即將過橋的人按其過橋的時間從小到大排列,設為a,b,……y,z。其中a和b是最快的二個,y和z是最慢的二個。那麼就有二種方案:

方案一 最快者將最慢的2個送過橋

第一步:a和z過橋,花費z分鐘。

第二步:a回來,花費a分鐘。

第三步:a和y過橋,花費y分鐘。

第四步:a回來,花費a分鐘。

這四步後總人數就減小2個,花費時間為a + a + y + z分鐘。

方案二 最快的2個將最慢的2個送過橋

第一步:a和b過橋,花費b分鐘。

第二步:a回來,花費a分鐘。

第三步:y和z過橋,花費z分鐘。

第四步:b回來,花費b分鐘。

這四步後總人數同樣減小2個,花費時間為a + b + b + z分鐘。

這樣,每次比較一下這二種方案就能將總人數減小2。然後我們再考慮一些邊界情況:

有三個人過橋設為a,b,c(已經排好序,下同)。應該花費a + b + c分鐘。

有二個人過橋設為a,b。那麼肯定是花費b分鐘。

有乙個人過橋設為a。肯定花費a分鐘。

所以 只需要比較 (b+b)>?(a+y)

int m=((2b)>(a+y))?2b:(a+y)

演算法之過河問題

過河問題,乙隻袋鼠需要過河,現在兩岸之間由n個樹樁,每個樹樁對應乙個彈力值。比如第乙個樹樁上彈力值是2,那麼就可以跳2個樹樁,如果樹樁上彈力值是0,那麼就會被困在該樹樁上。那麼請輸入相應的樹樁個數和樹樁的彈力值的情況下,輸出需要幾步才能過河。文中用乙個金礦問題將dp演算法解釋地比較清楚。這裡參照該思...

經典趣味數學問題之過河問題

一 問題描述 在漆黑的夜裡,甲乙丙丁共四位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時過。如果各自單獨過橋的話,四人所需要的時間分別是1 2 5 8分鐘 而如果兩人同時過橋,所需要的時間就是...

經典演算法一 過橋問題

在漆黑的夜裡,四位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個人一共只帶了乙隻手電筒,而橋窄得只夠讓兩個人同時通過。如果各自單獨過橋的話,四人所需要的時間分別是1,2,5,8分鐘 而如果兩人同時過橋,所需要的時間就是走得比較慢的那個人單獨...