切換
舊版
前往
大廳
主題

ZeroJudge - c115: 00437 - The Tower of Babylon 解題心得

Not In My Back Yard | 2019-03-31 18:17:45 | 巴幣 0 | 人氣 255

題目連結:


題目大意:
給定一正整數 n (n ≦ 30),代表有 n 種方塊。接下來 n 列輸入,每列輸入給定三正整數 x 、 y 、z ,代表一種方塊的長、寬、高。

每一種方塊有無限多個,且方塊可以旋轉。而一個方塊可以疊在一個方塊上的充分條件為:在上面的方塊之底面長、寬要均小於下面方塊的底面長寬。

求最高可以疊多高?輸出格式參考範例輸出。



範例輸入:
1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0


範例輸出:
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342


解題思維:
因為每種方塊都可以旋轉又有無限多個,所以每給定一種方塊的長寬高,等於給定了六種方塊(長寬高互換,雖然可以按照底面的類別分成只剩下三種)。

把每種方塊(包含長寬高互換的)放進陣列後,對其底面的長、寬由小到大排序(由大到小也行,但是等等做的事會是相反的)。

接著對此陣列做 LIS (Longest Increasing Subsequences,最長遞增子序列),也就是指當前方塊可以放在之前方塊的上面時,就放放看。如果有超過現有最高的高度就更新成最大值。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作