Re: [問題] 一個感覺是 dynamic programming 的題目

看板Prob_Solve (計算數學 Problem Solving)作者 (keeperkai)時間14年前 (2010/04/23 02:33), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串8/12 (看更多)
上一篇太長,以下是我根據loco大的說法寫出來的演算法, 希望各位指正: input w[],c[]//重量矩陣 耐重矩陣 data structures: int m[]:用來記錄考慮前i box的時候的可能最高高度 box s[]:一個紀錄在考慮前i box的時候高度最高前提下,重量最小的 解中含有的box set int maxindex:紀錄當前解結構中重量最大的box的index int weightofset:紀錄當前解結構的重量總和 想法: 先排序依照capacity的Increasing order,從只考慮第一個箱子開始, 最佳解就是第一個箱子,並且依照loco大的想法運作,依序球出s[n],m[n] 當然s,m不用陣列也可以,因為演算法只會用到上一次解結構的內容, 只是這樣寫比較清楚。 m[i]= m[i-1]+1, c[i]>=w[i]+weightofset m[i-1], otherwise s[i]= s[i-1]+box[i], c[i]>=w[i]+weightofset otherwise s[i-1]+box[i]-box[maxindex],w[i]<w[maxindex] s[i-1],otherwise Algo: Sort(c[],w[]) m[1]=1 s[1]=box[1] maxindex=1 weightofset=w[1] for i= 2 to n if c[i]>=w[i]+weightofset m[i]=m[i-1]+1 weightofset=weightofset+w[i] s[i]=s[i-1]+box[i] if w[i]>w[maxindex] maxindex=i else m[i]=m[i-1] if (w[i]>=w[maxindex]) s[i]=s[i-1] else weightofset=weightofset+w[i]-w[maxindex] s[i]=s[i-1]+box[i]-box[maxindex] maxindex=getmaxindex(s[i],w[])//這裡偷懶 本人第一次po文,也並非專業人士,希望各位大大可以"溫和"一點指正(鞭)我XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.222.23.95 ※ 編輯: keeperkai 來自: 203.222.23.95 (04/23 02:34) ※ 編輯: keeperkai 來自: 203.222.23.95 (04/23 02:37)

04/23 09:24, , 1F
你偷懶的那邊getmaxindex複雜度是多少?
04/23 09:24, 1F
文章代碼(AID): #1Bq9PTUV (Prob_Solve)
討論串 (同標題文章)
文章代碼(AID): #1Bq9PTUV (Prob_Solve)