// 例1
【例題1】在乙個夜黑風高的晚上,有n(n <= 50)個小朋友在橋的這邊,現在他們需要過橋,但是由於橋很窄,每次只允許不大於兩人通過,他們只有乙個手電筒,所以每次過橋的兩個人需要把手電筒帶回來,i號小朋友過橋的時間為t[i],兩個人過橋的總時間為二者中時間長者。問所有小朋友過橋的總時間最短是多少。
下面是原始碼,無解析!
備忘錄(常用於自頂向下把)就是,
記錄最底層的已經解析的結果,然後使 函式回溯時能夠提前結束遞迴。
#include
//過橋所需的時間how long time spend crossing the bridge
const int times=;
//自底向上的方法
int crossbridgedowntoup(const int *times, int n)
else
return min(crossbridgeuptodown(n-1) + times[0] + times[n-1],
times[0] + 2 * times[1] + times[n-1] + crossbridgeuptodown(n-2));
}//帶備忘錄式的自頂向下方法
int memocrossbridge(int n, int *memocosttime)
//記錄結果
if (n <= 2)
memocosttime[n-1] = min(memocrossbridge(n-1,memocosttime) + times[0] + times[n-1],
times[0] + 2 * times[1] + times[n-1] + memocrossbridge(n-2,memocosttime));
return memocosttime[n-1];
}//備忘錄式的方法
int record(int n)
return memocrossbridge(n, memocosttime);
}int main()
演算法 動態規劃 線性模型之小朋友過橋
題目 在乙個夜黑風高的晚上,有n n 50 個小朋友在橋的這邊,現在他們需要過橋,但是由於橋很窄,每次只允許不大於兩人通過,他們只有乙個手電筒,所以每次過橋的兩個人需要把手電筒帶回來,i號小朋友過橋的時間為t i 兩個人過橋的總時間為二者中時間長者。問所有小朋友過橋的總時間最短是多少。輸入 兩行資料...
動態規劃之小朋友過河問題
小朋友過橋問題 在乙個夜黑風高的晚上,有n n 50 個小朋友在橋的這邊,現在他們需要過橋,但是由於橋很窄,每次只允許不大於兩人通過,他們只有乙個手電筒,所以每次過橋的兩個人需要把手電筒帶回來,i號小朋友過橋的時間為t i 兩個人過橋的總時間為二者中時間長者。問所有小朋友過橋的總時間最短是多少。思路...
動態規劃程式設計題加課 手電過橋問題
此題最難的是切入思路。我一開始糾結於過橋順序的多種情況。後來發現思路要從時間最大者切入。時間最大者t n過橋的時間一定會被計入總時間,因為沒有人可以帶他。那麼t n過橋的順序其實不重要,他過橋的策略只有兩種 1.帶同伴過橋,同伴送手電回來。2.帶同伴過橋,第三者送手電回來。要有第三者回來,那麼必然先...