我有一个不同尺寸的矩形列表。
rects = [100x20, 30x10, 10x10, 70x20, 40x30, 50x10]
我正在尝试从这些矩形中呈现一个表格。如果我有固定数量的列,我可以简单地计算行数以及每行和每列的大小,如下所示:
numCols = 4;
for (i = 0; i < rects.size - 1, i++):
rect = rects[i];
col = i % numCols;
row = floor(i / numCols);
columns[col] = max(columns[col], rect.width);
rows[row] = max(rows[row], rect.height);
end for;
现在我希望我的表格由最大行宽配置。列数取决于最佳行宽的运行时计算。
使用上面的列表和设置为 140 的最大行,我希望我的表是:
rects = [100x20, 30x10, 70x10, 10x20, 40x30, 10x10]
100x20, 30x10
70x10, 10x20
40x30, 10x10
cols = [100, 30]
rows = [20, 20, 30]
我处理这种情况的第一个想法是为每个可能的列数缓存最大列宽。然后最后一个总和 <= 最大行宽的条目获胜。
max[1] = [100]
max[2] = [100, 30] - wins
max[3] = [100, 40, 70] - 210 > 140
max[4] = [100, 30, 70, 10]
max[5] = [100, 30, 70, 10, 40]
max[6] = [100, 30, 70, 10, 40, 10]
不幸的是,我需要为每个可能的列号创建一个 max 条目。该列表可能会变得非常大。有人知道解决这个优化问题的算法吗?