Contents
Problem
Solution
積木可隨意旋轉,先將長寬高排序好後,可以歸納出 3 種可能:
(以 1 2 3 表其相對大小)
長 寬 高
1 2 3
1 3 2
2 3 1
當然也可以直接存其 6 種組合。
接著排序所有積木,要可以疊在上面它的長和寬必定小於下面的長和寬,所以可先用:
bool operator<(const Block& b)
{
if (len[0] == b.len[0])
return len[1] < b.len[1];
else
return len[0] < b.len[0];
}
排出先後關係。
最後再做 LIS 時用條件判斷即可:
if (blocks[i].len[0] < blocks[j].len[0] && blocks[i].len[1] < blocks[j].len[1])
hight[j] = max(hight[j], hight[i] + blocks[j].len[2]);
Code
1 |
|