動態規劃 小朋友過橋問題 C 版本 3中動態規劃

2021-10-10 21:27:56 字數 1020 閱讀 7294

// 例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.帶同伴過橋,第三者送手電回來。要有第三者回來,那麼必然先...