給出\(n\)塊積木,對于每塊積木都有一個高度\(h_i(h_i\le x)\),現在讓你将這\(n\)塊積木分成\(m\)堆,使得任意兩堆積木的高度差不超過\(x\).
先将積木按照高度從大到小排序,将前\(m\)個積木加入到集合中,每次選出集合中高度最小的堆,将目前積木放進該隊中,這樣就能保證最終能構造出符合要求的答案。
題目中提到每塊積木的高度都小于等于\(x\),那麼最一開始将\(m\)塊積木放進優先隊列中,就可以保證這\(m\)塊積木的最大高度和最小高度的高度差不超過\(x\)。
現在設優先隊列中高度最小的堆的高度為\(h_0\),次小高的堆的高度為\(h_1\),易得到\(h_0 \le h_1\),那麼當\(h_0\)加上任意一個高度\(h(h\le x)\),有\((h_0+h)-h_1<=x\)。
\(h_0+h\)可能比優先隊列中最大的元素要大,也可能小,也可能相等,但是這個并不是關鍵。