此題最難的是切入思路。我一開始糾結於過橋順序的多種情況。後來發現思路要從時間最大者切入。時間最大者t_n過橋的時間一定會被計入總時間,因為沒有人可以帶他。那麼t_n過橋的順序其實不重要,他過橋的策略只有兩種:1. 帶同伴過橋,同伴送手電回來。2. 帶同伴過橋,第三者送手電回來。要有第三者回來,那麼必然先於t_n, 有另外兩人過河,然後二人中乙個送回手電筒留在這邊,t_n與同伴過河,先過河二人剩下的那個送回手電筒,此時對面留下了t_n與同伴。
第一種情況的最優解是帶時間最小者t_1過橋,然後t_1回來,此時耗費時間為t_n+t_1。 第二種情況最優解是讓t_1與t_2先過橋,時間為t_n+t_2+t_2+t_1。這時t_n過河的同伴是t_n-1收益最大。所以最後橋對面為t_n與t_n-1。
第一種策略的總最優時間是剩下的t_1:t_n-1的過河時間的子問題的最優解。即opt[n-1]+t_n+t_1. 第二種策略是opt[n-2]+t_n+t_1+2*t_2. 兩種策略包含了所有的可能性,問題的總最優時間就是兩種策略最優時間的取小者。
其次要考慮的是結束條件。兩種策略剩下的沒過橋的人數都不可能為一人,所以結束條件要考慮還有2人和3人兩種情況,最優解分別為opt[2] = t_2與opt[3] = t_3+t_2+t_1. opt[4]開始就可以套用公式。
**如下:
def
動態規劃 小朋友過橋問題 C 版本 3中動態規劃
例1 例題1 在乙個夜黑風高的晚上,有n n 50 個小朋友在橋的這邊,現在他們需要過橋,但是由於橋很窄,每次只允許不大於兩人通過,他們只有乙個手電筒,所以每次過橋的兩個人需要把手電筒帶回來,i號小朋友過橋的時間為t i 兩個人過橋的總時間為二者中時間長者。問所有小朋友過橋的總時間最短是多少。下面是...
動態規劃 採藥問題 原題 題解
這裡的採藥問題是乙個典型的0 1揹包。原題 引用open judge 總時間限制 1000ms 記憶體限制 65536kb 描述辰辰是個很有潛能 天資聰穎的孩子,他的夢想是稱為世界上最偉大的醫師。為此,他想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫師把他帶到個到處都是草藥的...
筆試刷題 動態規劃 博弈問題
usr bin env python coding utf 8 author chilewang created at 2020 03 20 15 59 question 問題 有一排正數,代表數值不同的紙牌排成一條線,玩家a和玩家b都可以看到。每位玩家在拿走數字的時候,都只能從最左和最右的數中選擇...