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)