精華區beta ACMCLUB 關於我們 聯絡資訊
Problem 103 題目: 堆箱子,根據題目所給的規則把箱子往上堆,求出最高的堆法。 解法: 用DP畫表格。 如二維的箱子的堆法: 1. Max_Box.i = Max ( Max_Box.j ) + 1 a) for(i = 1 ; i <= 5 ; i++ ) 排序後的編號 箱 子 最大高度 先前的箱子 1 2 3 1 Null <-- i == 1 2 2 5 1 Null 3 3 7 1 Null 4 5 6 1 Null 5 7 8 1 Null b) 排序後的編號 箱 子 最大高度 先前的箱子 1 2 3 1 Null 2 2 5 2 1 <-- i == 2 3 3 7 1 Null 4 5 6 1 Null 5 7 8 1 Null c) 排序後的編號 箱 子 最大高度 先前的箱子 1 2 3 1 Null 2 2 5 2 1 3 3 7 3 2 <-- i == 3 (檢查 1 ~ 2 的箱 子,尋找到3的 時候最大的高度) 4 5 6 1 Null 5 7 8 1 Null 依此類推,建立整個表格。然後找出最大高度,接著依照先前的箱子找出排序規則。因為 答案是要由小排到大的順序,所以在一開始可以用由大到小來建表,則在回溯解法的時候 就會是由小到大了。如果依照上面的東東的話到時候回溯出來的是由大到小,要輸出的話 就要再整理一次。 p.s. 覺得這題用到蠻多排序的,如用C寫的話可以參考一下 qsort()的語法,相關說 明可以到linux底下問一下男人(man) -- ※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw) ◆ From: jul ※ 編輯: aecho 來自: jul (03/21 13:30) ※ 編輯: aecho 來自: jul (03/21 13:43)