现有n块木板其中第i块木板的高度是hi宽度是wi高度和宽度都是正整数。木板不能旋转。我们希望能将这n块木板拼接成k块大木板。我们可以横向裁剪每块木板即将其高度hi变为h′i 0h′i≤hih′i也必须是正整数。此外我们还可以将高度相同的一块或多块木板拼接成一块大木板。我们希望知道在拼成k块大木板的前提下被裁剪掉的区域的总面积的最小值。对于这道算法题目你有什么思路?
这道题目可以用二分答案加贪心的思想来解决。
首先,我们可以二分答案,假设当前的答案为x,我们需要判断是否存在一种拼接方式,使得被裁剪掉的区域的总面积小于等于x。
然后,我们可以考虑贪心的思想来拼接木板。具体来说,我们可以按照木板的高度从大到小排序,然后依次考虑每块木板。对于当前要考虑的木板,我们可以将和它高度相同的木板一起考虑,然后按照宽度从大到小排序。对于每个宽度,我们可以将当前的木板及其高度相同的木板拼成一块大木板,然后更新答案。
如果最终能够拼成k块大木板,说明当前的答案是可行的,我们需要尝试缩小答案;否则,当前的答案是不可行的,我们需要尝试增大答案。最终得到的答案即为被裁剪掉的区域的总面积的最小值。
原文地址: http://www.cveoy.top/t/topic/fkZB 著作权归作者所有。请勿转载和采集!